一、顺序栈的定义:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100//顺序栈存储空间的的初始分配量;
#define OVERFLOW -1
#define OK 1;
#define ERROR -1
#define MAX 100
typedef int Status;
typedef int SElemType;
typedef struct
{
SElemType *base;//栈底指针;
SElemType *top;//栈顶指针;
int length;
int stacksize;//栈可用最大容量;
}SqStack;
二、顺序栈的初始化:
算法步骤:
①为顺序栈分配一个最大容量为MAXSIZE的数组空间,使base指向这段空间的基地址(栈底);
②栈顶指针top初始为base,表示栈为空;
③stacksize置为栈的最大容量MAXSIZE;
Status InitStack(SqStack &S)
{//构建一个空栈
S.base=(int*)malloc(MAXSIZE*sizeof(int));//为顺序表动态分配一个最大容量为MAXSIZE的数组空间
if(!S.base) exit(OVERFLOW);//存储分配失败
S.top=S.base;//top初始为base,空栈
S.stacksize=MAXSIZE;//stacksize置为栈的最大容量MAXSIZE
return OK;
}
三、入栈:
算法步骤:
①判断栈是否为满,若满则返回ERROR;
②将新元素压入栈顶,栈顶指针+1;
Status Push(SqStack &S,SElemType e)
{//插入元素e为新的栈顶元素;
if(S.top-S.base==S.stacksize)//栈满;
return ERROR;
*S.top++=e;//将元素e压入栈顶,栈顶指针加1;
return OK;
}
四、出栈:
算法步骤:
①判断栈是否空,若空则返回ERROR;
②栈顶指针减一,栈顶元素出栈;
Status Pop(SqStack &S)
{//从栈顶遍历栈的值;
int e;
if(S.top==S.base)
return ERROR;//栈空;
e=*--S.top;//栈顶指针及减1,将栈顶元素赋给e;
return e;//返回e;
}
五、取栈顶元素:
算法步骤:
①判断栈非空;文章来源:https://www.toymoban.com/news/detail-723131.html
②返回栈顶值;文章来源地址https://www.toymoban.com/news/detail-723131.html
SElemType GetTop(SqStack S)
{//返回S的栈顶元素,不修改栈顶指针;
if(S.top!=S.base)//栈非空;
return *(S.top-1);//返回栈顶元素的值,栈顶指针不变;
}
六、主函数:
int main()
{
SqStack S;
InitStack(S);
printf("请输入顺序栈长度:");
int x;
scanf("%d",&x);
printf("请输入元素:");
int e;
for (int i = 1; i <= x; i++) {
scanf("%d", &e);
Push(S, e);//入栈
}
for(int i=0;i<x;i++)
{
printf("%d ",Pop(S));//出栈
}
printf("\n");
printf("---------\n");
printf("栈顶元素为:");
printf("%d",GetTop(S));//取栈顶元素;
return 0;
}
七、完整代码:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100//顺序栈存储空间的的初始分配量;
#define OVERFLOW -1
#define OK 1;
#define ERROR -1
#define MAXSIZE 100
typedef int Status;
typedef int SElemType;
typedef struct
{
SElemType *base;//栈底指针;
SElemType *top;//栈顶指针;
int length;
int stacksize;//栈可用最大容量;
}SqStack;
Status InitStack(SqStack &S)
{//构建一个空栈
S.base=(int*)malloc(MAXSIZE*sizeof(int));//为顺序表动态分配一个最大容量为MAXSIZE的数组空间
if(!S.base) exit(OVERFLOW);//存储分配失败
S.top=S.base;//top初始为base,空栈
S.stacksize=MAXSIZE;//stacksize置为栈的最大容量MAXSIZE
return OK;
}
Status Push(SqStack &S,SElemType e)
{//插入元素e为新的栈顶元素;
if(S.top-S.base==S.stacksize)//栈满;
return ERROR;
*S.top++=e;//将元素e压入栈顶,栈顶指针加1;
return OK;
}
Status Pop(SqStack &S)
{//从栈顶遍历栈的值;
int e;
if(S.top==S.base)
return ERROR;//栈空;
e=*--S.top;//栈顶指针及减1,将栈顶元素赋给e;
return e;//返回e;
}
SElemType GetTop(SqStack S)
{//返回S的栈顶元素,不修改栈顶指针;
if(S.top!=S.base)//栈非空;
return *(S.top-1);//返回栈顶元素的值,栈顶指针不变;
}
int main()
{
SqStack S;
InitStack(S);
printf("请输入顺序栈长度:");
int x;
scanf("%d",&x);
printf("请输入元素:");
int e;
for (int i = 1; i <= x; i++) {
scanf("%d", &e);
Push(S, e);//入栈
}
for(int i=0;i<x;i++)
{
printf("%d ",Pop(S));//出栈
}
printf("\n");
printf("---------\n");
printf("栈顶元素为:");
printf("%d",GetTop(S));//取栈顶元素;
return 0;
}
到了这里,关于顺序栈的初始化、构建、入栈,出栈和取栈顶元素的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!