#include <stdio.h>
#include<malloc.h>
#define MAXLEN 10
typedef int datatype;
typedef struct
{ datatype data[MAXLEN];
int top;
}SeqStack;
SeqStack *Snull();
int Push(SeqStack *s,datatype x);
int Pop(SeqStack *s,datatype *x);
datatype ReadTop(SeqStack *s);
int Sempty(SeqStack *s);
int sfull(SeqStack *s);
void ShowStack(SeqStack *s);
void Conversion(int m,int n);
void main()
{
SeqStack *s;
int i=1,j,chioce,val,n,m,flag;
char a;
s=Snull();
while(i)
{
printf("/n");
printf("/n/t/t 顺序栈操作应用演示 ");
printf("/n/t/t****************************************************");
printf("/n/t/t| 1--------------进栈 |");
printf("/n/t/t| 2--------------出栈 |");
printf("/n/t/t| 3--------------显示 |");
printf("/n/t/t| 4--------------读取栈顶元素 |");
printf("/n/t/t| 5--------------判栈满 |");
printf("/n/t/t| 6--------------判栈空 |");
printf("/n/t/t| 7--------------数制转换 |");
printf("/n/t/t| 8--------------置空栈 |");
printf("/n/t/t| 0--------------返回 |");
printf("/n/t/t****************************************************");
printf("/n/t/t 请选择序号 (0--8): ");
chioce=getchar();
getchar();
switch(chioce)
{
case '1':
j=1;
while(j)
{
printf("/n/t/t输入整数('0'结束)按回车 :");
scanf("%d",&val);getchar();
if(val!=0)
{
flag=Push(s,val);
if(flag==0)
{
j=0;
printf("栈满");
}
}
else
j=0;
};break;
case '2':
if(s->top!=-1)
{
Pop(s,&val);
printf("/n/t/t出栈元素为 :%6d/n",val);
}
else
if(s->top==-1)
printf(" 栈已为空!");
break;
case '3':
ShowStack(s);break;
case '4':
ReadTop(s);break;
case '5':
sfull(s);break;
case '6':
Sempty(s);break;
case '7':
printf("/n/t/t输入十进制数'n'转换的进制为'm'(n,m):");
scanf("%d,%d",&n,&m);
Conversion(n,m);break;
case '8':
s=Snull();break;
case '0':i=0;
}
if(chioce=='1'||chioce=='2'||chioce=='3'||chioce=='4'||chioce=='5'||chioce=='6'||chioce=='7')
{
printf("/n/t/t双击回车返回主菜单,输入0按回车退出程序./n");
a=getchar();
if(a!='/xA')
i=0;
}
}
}
SeqStack *Snull()
{ SeqStack *s;
s=(SeqStack *)malloc(sizeof(SeqStack));
s->top=-1;
return s;
}
int Push(SeqStack *s,datatype x)
{ if(s->top==MAXLEN-1)
return 0;
else
{ s->top++;
s->data[s->top]=x;
return 1;
}
}
int Pop(SeqStack *s,datatype *x)
{ if (Sempty(s))
return 0;
else
{ *x=s->data[s->top];
s->top--;
return 1;
}
}
datatype ReadTop(SeqStack *s)
{ if(s->top==-1)
return 0;
else
printf(" 栈顶元素为:%3d ",s->data[s->top]);
return 1;
}
int Sempty(SeqStack *s)
{ if(s->top==-1)
{
printf(" 栈已空!");
return 1;
}
else
{
printf(" 非空!");
return 0;
}
}
int sfull(SeqStack *s)
{ if (s->top==MAXLEN-1)
{
printf(" 栈已满!");
return 1;
}
else
{
printf(" 栈未满!");
return 0;
}
}
void ShowStack(SeqStack *s)
{
int i;
if(s->top==-1)
printf(" 栈已为空!");
else
printf(" 栈元素:");
for(i=s->top;i>=0;i--)
printf("%3d ",s->data[i]);
}
void Conversion(int n,int m)
{
SeqStack*s=Snull();
int x;
while(n)
{
x=n%m;
n=n/m;
s->top++;
s->data[s->top]=x;
}
while(s->top>-1)
{
printf("/t%d",s->data[s->top]);
s->top--;
}
getchar();
printf("/n");
}
顺序栈的子系统
最新推荐文章于 2024-06-08 14:48:20 发布