顺序栈的基本操作 顺序栈 数据结构 C语言
时间:2010-09-28 来源:zhengdong_li
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<stdlib.h>
#include<iomanip>
#include<string>
#define MAXSIZE 100
typedef struct//这里是一个栈结构的声明
{
int data[MAXSIZE];
int top;
}SqStack;
void PushStack(SqStack *S,int x)//入栈
{
if(S->top==MAXSIZE-1)
printf("栈已满,不能入栈\n");
else{
S->data[++S->top]=x;
printf("此数据已入栈\n");
}
}
int Empty(SqStack *S)//判断栈空
{return(S->top==-1?1:0);
}
int Pop(SqStack *S,int x)//删除顺序栈S的栈顶元素,并用x返回栈顶元素
{
if(Empty(S))
{printf("空栈\n");
return 0;
}
x=S->data[S->top];
S->top--;
printf("出栈成功\n");
return x;
}
void pintstruct(SqStack *S,int x)
{
if(Empty(S))
{ printf("栈空\n");
exit(0);}
else
{
x=S->data[S->top];
printf("%d ",x); /*打印*/
S->top--; /*修改栈顶指针*/
}
}
int GetStackTop(SqStack S)//取栈顶元素
{
return S.data[S.top];
}
int main()
{
int x,flag=1,n;
SqStack newStack;
newStack.top=-1;
printf(" *------------------------------------------*\n");
printf(" * *\n");
printf(" * 1.......置空栈 *\n");
printf(" * *\n");
printf(" * 2.......进栈 *\n");
printf(" * *\n");
printf(" * 3.......退栈 *\n");
printf(" * *\n");
printf(" * 4.......取栈顶元素 *\n");
printf(" * *\n");
printf(" * 5.......显示栈内元素 *\n");
printf(" * *\n");
printf(" * 0...........退出 *\n");
printf(" * *\n");
printf(" *------------------------------------------*\n\n");
while(1)
{
switch(getch())
{
case '1': newStack.top=-1;
printf("栈已置空\n");
break;
case '2':
printf("请依次输入要入栈的元素,以输入0结束\n");
while(flag)
{
scanf("%d",&x);
if(x==0)flag=0;
else
PushStack(&newStack,x);
}
break;
case '3': printf("请输入要退栈的元素个数:");
scanf("%d",&n);
printf("退栈的%d个元素依次为:\n",n);
while(n--)
{
printf("%d ",Pop(&newStack,x));
}
printf("\n");
printf("出栈成功!\n");
break;
case '4': if(Empty(&newStack)){
printf("空栈\n");
}
else
printf("栈顶元素是 %d.\n",GetStackTop(newStack));
break;
case '5': if(Empty(&newStack)){
printf("空栈\n");
}
else
pintstruct(&newStack,x);
break;
break;
case '0':exit(0);
break;
default : printf("操作错误,请重新输入!\n");
break;}
}
return 0;
}
相关阅读 更多 +