栈的顺序存储结构-顺序栈的基本操作
温馨提示:
本文最后更新于 2021年02月23日,已超过 1,321 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
栈的的定义
只能在表的一端(栈顶)进行插入和删除操作的线性表。
栈的基本操作
顺序栈的表示
/*定义顺序栈*/
typedef struct {
int *base; //用于栈存储的基地址
int *top; //指向该基地址的栈顶指针
int stackSize; //栈的大小
}SqStack;
顺序栈的初始化
/*初始化*/
int InitStack_S(SqStack &S){
S.base = (int *)malloc(sizeof(int)); //给基地址分配一个内存空间
S.top = S.base; //将栈顶指针指向这个基地址
S.stackSize = MAXSIZE; //设置栈的大小
return 0;
}
进栈操作
/*进栈*/
int Push(SqStack &S,int e){
if(S.top-S.base==S.stackSize) return -1;
*S.top = e; //将输入的值压入栈中
S.top++; //指针上移一个单位
return 0;
}
出栈操作
/*出栈*/
int Pop(SqStack &S,int &e) {
if(S.base==S.top) return -1;
S.top--; //指针下移一个
e = *S.top; //将当前指针所指的值赋值给e
return 0;
}
获取顺序栈的长度
/*获取栈的长度*/
int GetLength_S(SqStack S){
return S.top-S.base;
}
判断栈空
/*判断栈空*/
int StackEmpty(SqStack S) {
if(S.top==S.base) return 0; //为空返回 0
return 1; //不为空返回1
}
清空顺序栈
/*清空栈*/
int ClearStack(SqStack S){
if(S.base) //栈不为空
S.base = S.top;
return 0;
}
销毁顺序栈
/*销毁栈*/
int DestroyStack(SqStack &S){
if(S.base){
free(S.base);
S.stackSize = 0;
S.top = S.base = NULL;
}
return 0;
}
读取栈顶元素
/*读取栈顶元素*/
int GetTop(SqStack S) {
return *(S.top-1);
}
完整代码
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
/*定义顺序栈*/
typedef struct {
int *base; //用于栈存储的基地址
int *top; //指向该基地址的栈顶指针
int stackSize; //栈的大小
}SqStack;
/*初始化*/
int InitStack_S(SqStack &S){
S.base = (int *)malloc(sizeof(int)); //给基地址分配一个内存空间
S.top = S.base; //将栈顶指针指向这个基地址
S.stackSize = MAXSIZE; //设置栈的大小
return 0;
}
/*进栈*/
int Push(SqStack &S,int e){
if(S.top-S.base==S.stackSize) return -1;
*S.top = e; //将输入的值压入栈中
*S.top++; //指针上移一个单位
return 0;
}
/*出栈*/
int Pop(SqStack &S,int &e) {
if(S.base==S.top) return -1;
*S.top--; //指针下移一个
e = *S.top; //将当前指针所指的值赋值给e
return 0;
}
/*获取栈的长度*/
int GetLength_S(SqStack S){
return S.top-S.base;
}
/*判断栈空*/
int StackEmpty(SqStack S) {
if(S.top==S.base) return 0; //为空返回 0
return 1; //不为空返回1
}
/*清空栈*/
int ClearStack(SqStack S){
if(S.base) //栈不为空
S.base = S.top;
return 0;
}
/*销毁栈*/
int DestroyStack(SqStack &S){
if(S.base){
free(S.base);
S.stackSize = 0;
S.top = S.base = NULL;
}
return 0;
}
/*读取栈顶元素*/
int GetTop(SqStack S) {
return *(S.top-1);
}
main(){
SqStack S;
int out;
int initStatus = InitStack_S(S);
if(initStatus==0){
printf("初始化成功!\n");
}else{
printf("初始化失败!\n");
}
printf("================\n");
Push(S,2); //元素2进栈
printf("元素2进栈\n");
Push(S,3); //元素3进栈
printf("元素3进栈\n");
Push(S,4); //元素4进栈
printf("元素4进栈\n");
Push(S,5); //元素5进栈
printf("元素5进栈\n");
printf("================\n");
printf("栈顶元素为:%d\n",GetTop(S));
printf("================\n");
Pop(S,out); //栈顶元素出栈
printf("出栈元素为:%d\n",out);
printf("栈顶元素为:%d\n",GetTop(S));
printf("================\n");
Pop(S,out); //栈顶元素出栈
printf("出栈元素为:%d\n",out);
printf("栈顶元素为:%d\n",GetTop(S));
}
运行结果
正文到此结束
- 本文标签: c语言 数据结构 栈
- 本文链接: https://www.it1997.com/article/44
- 版权声明: 本文由小陈没烦恼原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权