~~~
#include<stdio.h>
#include<windows.h>
#include<malloc.h>
#define maxsize 50
typedef int elemtype;
typedef struct //定義
{
elemtype data[maxsize];
int top;
}sqstack;
void initstack(sqstack *&s) //初始化
{
s=(sqstack *)malloc(sizeof(sqstack));
s->top=-1;
}
void push(sqstack *&s) //進棧
{
char e;
getchar();
printf("請輸入需進棧的元素:");
scanf("%c",&e);
if(s->top>maxsize-1)
printf("棧滿,錯誤!\n");
else
{
s->top++;
s->data[s->top]=e;
printf("進棧成功\n");
}
}
void gettop(sqstack *s) //取棧頂元素
{
char t;
if(s->top==-1)
printf("棧空,取值失敗!\n");
else
{
t=s->data[s->top];
printf("取值成功,棧頂元素為:%c\n",t);
}
}
void stackempty(sqstack *s) //判斷棧是否為空
{
if(s->top==-1)
printf("棧為空\n");
else
printf("棧不為空\n");
}
void pop(sqstack *&s) //出棧
{
char e;
if(s->top==-1)
printf("棧為空,出棧失敗\n");
else
{
e=s->data[s->top];
s->top--;
printf("出棧成功,出棧元素為:%c\n",e);
}
}
int length(sqstack *s) //求棧長
{
if(s->top==-1)
return(-1);
else
return(s->top+1);
}
void destroy(sqstack *&s) //銷毀棧
{
char t;
getchar();
printf("確定要銷毀棧請輸入y 否則不銷毀:");
scanf("%c",&t);
if(t=='y')
{
free(s);
printf("銷毀成功\n");
exit(0);
}
else
printf("棧未銷毀\n");
}
void output(sqstack *s)
{
int m,n=s->top;
m=length(s)+1;
if(s->top==-1)
printf("棧為空\n");
else
{
printf("出棧序列為:");
for(;m>0;m--)
{
printf(" %c",s->data[s->top]);
s->top--;
}
printf("\n");
s->top=n;
}
}
void main()
{
sqstack *s;
printf(" ************歡迎使用順序棧運算系統*************\n");
int m;
initstack(s);
while(1)
{
printf("請選擇:");
printf(" 1 進棧\n");
printf(" 2 判斷棧是否為空\n");
printf(" 3 取棧頂元素\n");
printf(" 4 出棧\n");
printf(" 5 銷毀棧\n");
printf(" 6 求棧的長度\n");
printf(" 7 輸出出棧序列\n");
printf(" 8 退出\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:printf("棧的長度為%d\n",length(s));break;
case 7:output(s);break;
case 8:exit(0);
default:printf("輸入錯誤,請重新輸入\n");
}
}
}
~~~