栈之顺序栈(包含完整代码)C语言版

您所在的位置:网站首页 打印顺序栈中元素 栈之顺序栈(包含完整代码)C语言版

栈之顺序栈(包含完整代码)C语言版

2024-05-23 23:39| 来源: 网络整理| 查看: 265

看一下关于栈的思维导图

在这里插入图片描述栈是只允许在一端进行插入或删除操作的线性表,按照物理结构的不同,栈又分为顺序栈和链栈。 本篇文章是顺序栈的专场。 在这里插入图片描述来看实现各个功能的代码块

//顺序栈的定义 #define MaxSize 10 //定义栈中最大元素的个数 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; }

顺序栈的缺点是栈的大小不能改变,也就是说顺序栈对空间的利用率不高,解决这一缺点除了使用链栈,还可以定义一种共享栈。

#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