~~~
#include<stdio.h>
#include<windows.h>
#include<malloc.h>
typedef int elemtype;
typedef struct linknode //鏈表的定義
{
elemtype data;
struct linknode *next;
} listack;
void initstack(listack *&s) //初始化
{
s=(listack *)malloc(sizeof(listack));
s->next=NULL;
}
void push(listack *s) //進棧
{
int e;
listack *p;
printf("請輸入進棧元素:");
scanf("%d",&e);
p=(listack *)malloc(sizeof(listack));
p->data=e;
p->next=s->next;
s->next=p;
printf("進棧成功\n");
}
void gettop(listack *s) //取棧頂元素
{
int t;
if(s->next==NULL)
printf("棧空,取值失敗!\n");
else
{
t=s->next->data;
printf("取值成功,棧頂元素為:%d\n",t);
}
}
void stackempty(listack *s) //判斷鏈棧是否為空
{
if(s->next==NULL)
printf("棧為空\n");
else
printf("棧不為空\n");
}
void pop(listack *&s) //出棧
{
listack *p;
int e;
if(s->next!=NULL)
{
p=s->next;
e=p->data;
s->next=p->next;
free(p);
printf("出棧成功,棧頂元素為:%d\n",e);
}
else
printf("棧為空,出棧失敗\n");
}
void destroy(listack *&s)
{
listack *p=s,*q=s->next;
char m;
getchar();
printf("確定要銷毀棧,請輸入y 否則不銷毀!\n");
scanf("%c",&m);
if(m=='y')
{
while(q!=NULL)
{
free(p);
p=q;
q=p->next;
}
free(p);
printf("銷毀成功!\n");
exit(0);
}
else
printf("鏈棧未銷毀!\n");
}
void main()
{
listack *s;
int m;
printf(" ******************歡迎使用**********************\n");
initstack(s);
while(1)
{
printf("請選擇:");
printf(" 1 進棧\n");
printf(" 2 判斷棧是否為空\n");
printf(" 3 取棧頂元素\n");
printf(" 4 出棧\n");
printf(" 5 銷毀棧\n");
printf(" 6 退出\n");
scanf("%d",&m);
switch(m)
{
case 1:push(s);break;
case 2:stackempty(s);break;
case 3:gettop(s);break;
case 4:pop(s);break;
case 5:destroy(s);break;
case 6:exit(0);
default:printf("輸入錯誤,請重新輸入\n");
}
}
}
~~~