栈之顺序栈(包含完整代码)C语言版 |
您所在的位置:网站首页 › 打印顺序栈中元素 › 栈之顺序栈(包含完整代码)C语言版 |
看一下关于栈的思维导图
顺序栈的缺点是栈的大小不能改变,也就是说顺序栈对空间的利用率不高,解决这一缺点除了使用链栈,还可以定义一种共享栈。 #define MaxSize 10 typedef struct{ elemtype data[MaxSize]; int top0; //0号栈顶指针 int top1; //1号栈顶指针 }ShStack; //初始化栈 void InitStack(SqStack &S){ S.top0=-1; S.top1=MaxSize; }完整代码如下: #include #include #define MaxSize 10 //定义栈中最大元素的个数 typedef int elemtype; typedef struct{ elemtype data[MaxSize]; //静态数组存放栈中元素,销毁栈时不必手动释放空间 int top; //定义栈顶指针 }SqStack; //初始化栈 void InitStack(SqStack &S){ S.top=-1; } void testStack(){ SqStack S; //声明一个顺序栈(分配空间) InitStack(S); } //判空 bool StackEmpty(SqStack S){ if(S.top==-1) return true; else return false; } //新元素入栈 bool Push(SqStack &S,elemtype x){ if(S.top==MaxSize-1) return false; //栈满,报错 S.data[++S.top]=x; //指针先加1再让新元素入栈 return true; } //出栈操作 bool Pop(SqStack &S,elemtype &x){ if(S.top==-1) return false; //栈为空 x=S.data[S.top--]; return true; } //获取栈顶元素 bool GetTop(SqStack S,elemtype &x){ if(S.top==-1) return false; //栈为空 x=S.data[S.top]; return true; } void menu(){ printf("请选择要进行的操作[1-6]:\n"); printf("1.初始化顺序栈;\n"); printf("2.判断顺序栈是否为空;\n"); printf("3.入栈;\n"); printf("4.出栈;\n"); printf("5.获取栈顶元素;\n"); printf("0.退出。\n"); } int main(){ SqStack S; int choose; elemtype x; menu(); scanf("%d",&choose); while(choose!=0){ switch(choose){ case 1:{ testStack(); printf("初始化成功!\n"); break; } case 2:{ bool f=StackEmpty(S); if(f==true) printf("空栈!\n"); else printf("非空!\n"); break; } case 3:{ printf("请输入要入栈的元素:\n"); scanf("%d",&x); if(Push(S,x)) printf("入栈成功!\n"); else printf("入栈失败!\n"); break; } case 4:{ if(Pop(S,x)) printf("元素%d出栈成功!\n",x); else printf("出栈失败!"); break; } case 5:{ if(GetTop(S,x)) printf("栈顶元素为:%d\n",x); else printf("获取失败!\n"); break; } default:{ printf("输入有误,请重新输入!\n"); break; } } menu(); scanf("%d",&choose); } return 0; } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |