数据结构—顺序栈的操作及实现(C/C++)
文章目录
1.0初始化定义
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100 //定义数组的最大长度
#define OK 1
#define OVERFLOW -1
#define ERROR -1
typedef int SElemType; // 自己定义的类型
typedef int status; // 上同
1.1顺序栈的定义
typedef struct
{
SElemType* base; //栈底指针
SElemType* top; //栈顶指针
int stacksize; //栈的最大容量
}sqstack;
1.2顺序栈的初始化
status Initstack(sqstack *S)
{
S->base = (SElemType*)malloc(MAXSIZE*sizeof(SElemType)); //为顺序栈动态分配一块容量为MAXSIZE的空间
if(!S->base) //如果分配空间失败,返回-1
{
exit(OVERFLOW);
}
else
{
S->top = S->base; //栈顶指针初始化为栈底指针>>>空栈
}
S->stacksize = MAXSIZE; //栈的容量为MAXSIZE
return OK;
}
1.3顺序栈的入栈
status Push(sqstack *S,SElemType e)
{
if(S->top-S->base==S->stacksize) //判断顺序栈满条件
{
printf("顺序栈满了!");
return ERROR;
}
else
{
*S->top = e; //圧入元素进栈
S->top++; //栈顶指针向上移动
}
return OK;
}
1.4顺序栈的出栈
status Pop(sqstack *S,SElemType &e)
{
if(S->top==S->base) //判断顺序栈栈空条件
{
return ERROR;
}
else
{
S->top--; //指针先-1
e = *S->top; //然后赋值给e带回
printf("%d\n",e);//这我直接打印弹出的元素
}
return OK;
}
1.5取顺序栈的栈顶元素
status GetTop(sqstack *S)
{
if(S->top!=S->base)
{
return *(S->top - 1);
}
return OK;
}
1.6 C主函数代码:
int main()
{
int n,m,e;
sqstack S;
Initstack(&S);
printf("请输入入栈元素的个数:");
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
printf("请输入第%d个入栈元素的值:",i);
scanf("%d",&e);
Push(&S,e);
}
printf("\n");
printf("此时栈顶元素为:%d",GetTop(&S));
printf("\n");
printf("请输入出栈元素的个数:");
scanf("%d",&m);
printf("出栈元素顺序为:\n");
for(int i=1;i<=m;i++)
{
Pop(&S,e);
}
printf("此时栈顶元素为:%d",GetTop(&S));
return 0;
}
1.7 C++主函数代码:
int main()
{
int n,m,e;
sqstack S;
Initstack(&S);
cout<<"请输入入栈元素的个数:";
cin>>n;
for(int i=1;i<=n;i++)
{
cout<<"请输入第"<<i<<"个入栈元素的值:";
cin>>e;
Push(&S,e);
}
cout<<endl;
cout<<"此时栈顶元素为:"<<GetTop(&S);
cout<<endl;
cout<<"请输入出栈元素的个数:";
cin>>m;
cout<<"出栈元素顺序为:"<<endl;
for(int i=1;i<=m;i++)
{
Pop(&S,e);
}
cout<<"此时栈顶元素为:"<<GetTop(&S);
return 0;
}
1.8 C 完整代码
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100 //定义数组的最大长度
#define OK 1
#define OVERFLOW -1
#define ERROR -1
typedef int SElemType; // 自己定义的类型
typedef int status; // 上同
//顺序栈的表示以及实现
typedef struct
{
SElemType* base; //栈底指针
SElemType* top; //栈顶指针
int stacksize; //栈的最大容量
}sqstack;
//顺序栈的初始化
status Initstack(sqstack *S)
{
S->base = (SElemType*)malloc(MAXSIZE*sizeof(SElemType)); //为顺序栈动态分配一块容量为MAXSIZE的空间
if(!S->base) //如果分配空间失败,返回-1
{
exit(OVERFLOW);
}
else
{
S->top = S->base; //栈顶指针初始化为栈底指针>>>空栈
}
S->stacksize = MAXSIZE; //栈的容量为MAXSIZE
return OK;
}
//入栈
status Push(sqstack *S,SElemType e)
{
if(S->top-S->base==S->stacksize) //判断顺序栈满条件
{
printf("顺序栈满了!");
return ERROR;
}
else
{
*S->top = e; //圧入元素进栈
S->top++; //栈顶指针向上移动
}
return OK;
}
//顺序栈的出栈
status Pop(sqstack *S,SElemType &e)
{
if(S->top==S->base) //判断顺序栈栈空条件
{
return ERROR;
}
else
{
S->top--; //指针先-1
e = *S->top; //然后赋值给e带回
printf("%d\n",e);//这我直接打印弹出的元素
}
return OK;
}
//取顺序栈顶元素
status GetTop(sqstack *S)
{
if(S->top!=S->base)
{
return *(S->top - 1);
}
return OK;
}
//主函数
int main()
{
int n,m,e;
sqstack S;
Initstack(&S);
printf("请输入入栈元素的个数:");
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
printf("请输入第%d个入栈元素的值:",i);
scanf("%d",&e);
Push(&S,e);
}
printf("\n");
printf("此时栈顶元素为:%d",GetTop(&S));
printf("\n");
printf("请输入出栈元素的个数:");
scanf("%d",&m);
printf("出栈元素顺序为:\n");
for(int i=1;i<=m;i++)
{
Pop(&S,e);
}
printf("此时栈顶元素为:%d",GetTop(&S));
return 0;
}
1.9 C++完整代码
#include<iostream>
#define MAXSIZE 100 //定义数组的最大长度
#define OK 1
#define OVERFLOW -1
#define ERROR -1
using namespace std;
typedef int SElemType; // 自己定义的类型
typedef int status; // 上同
//顺序栈的表示以及实现
typedef struct
{
SElemType* base; //栈底指针
SElemType* top; //栈顶指针
int stacksize; //栈的最大容量
}sqstack;
//顺序栈的初始化
status Initstack(sqstack *S)
{
S->base = new SElemType[MAXSIZE]; //为顺序栈动态分配一块容量为MAXSIZE的空间
if(!S->base) //如果分配空间失败,返回-1
{
exit(OVERFLOW);
}
else
{
S->top = S->base; //栈顶指针初始化为栈底指针>>>空栈
}
S->stacksize = MAXSIZE; //栈的容量为MAXSIZE
return OK;
}
//入栈
status Push(sqstack *S,SElemType e)
{
if(S->top-S->base==S->stacksize) //判断顺序栈满条件
{
cout<<"顺序栈满了!";
return ERROR;
}
else
{
*S->top = e; //圧入元素进栈
S->top++; //栈顶指针向上移动
}
return OK;
}
//顺序栈的出栈
status Pop(sqstack *S,SElemType &e)
{
if(S->top==S->base) //判断顺序栈栈空条件
{
return ERROR;
}
else
{
S->top--; //指针先-1
e = *S->top; //然后赋值给e带回
cout<<e<<endl; //这我直接打印弹出的元素
}
return OK;
}
//取顺序栈顶元素
status GetTop(sqstack *S)
{
if(S->top!=S->base)
{
return *(S->top - 1);
}
return OK;
}
//主函数
int main()
{
int n,m,e;
sqstack S;
Initstack(&S);
cout<<"请输入入栈元素的个数:";
cin>>n;
for(int i=1;i<=n;i++)
{
cout<<"请输入第"<<i<<"个入栈元素的值:";
cin>>e;
Push(&S,e);
}
cout<<endl;
cout<<"此时栈顶元素为:"<<GetTop(&S);
cout<<endl;
cout<<"请输入出栈元素的个数:";
cin>>m;
cout<<"出栈元素顺序为:"<<endl;
for(int i=1;i<=m;i++)
{
Pop(&S,e);
}
cout<<"此时栈顶元素为:"<<GetTop(&S);
return 0;
}
2.0运行截图
2.1参考书籍
《数据结构》(C语言版)(第2版)—严蔚敏 李冬梅 吴伟民 编著
2.2总结
如果对你有帮助,点点关注,多评论交流指正!