一、前言
想必我们高校大学生和一些小白在日常学习以及工作当中都会遇到顺序栈,特别是在学习数据结构和C语言的时候仔细听,但下课还是不懂;不仔细听更是一塌糊涂;下面这些文字及代码就是关于顺序栈简单的算法,过程就只需要输入一些相关信息,方可出现运算结果,详情如下:
二、线性表是什么?
顺序栈是栈的顺序实现。顺序栈是指利用顺序存储结构实现的栈。采用地址连续的存储空间(数组)依次存储栈中数据元素,由于入栈和出栈运算都是在栈顶进行,而栈底位置是固定不变的,可以将栈底位置设置在数组空间的起始处;栈顶位置是随入栈和出栈操作而变化的,故需用一个整型变量top来记录当前栈顶元素在数组中的位置。
【内容来源:百度百科-顺序栈顺序栈_百度百科 (baidu.com)】
三、代码段
代码如下:
#include "stdio.h"
#define MAXLEN 100 /*顺序栈存储空间的总分配量*/
typedef int DataType; /*定义DataType为int类型*/
typedef struct /*顺序栈存储类型*/
{ DataType data[MAXLEN]; /*存放顺序栈的数组*/
int top; /*记录栈顶元素位置的变量*/
}SeqStack;
void InitStack(SeqStack *S)//初始化函数
{
S->top=-1;//初始化的顺序栈为空
}
int EmptyStack(SeqStack *S)//判断栈空函数
{
if(S->top==-1)//栈为空
return 1;
else
return 0;
}
int FullStack(SeqStack *S)//判断栈满函数
{
if(S->top==MAXLEN-1)//栈为满
return 1;
else
return 0;
}
int Push(SeqStack *S,DataType x)//进栈操作函数
{
if(FullStack(S))//调用FullStack(s),判断栈是否为满
{
printf("栈满,不能近栈!");
return 0;//栈满,不能近栈
}
else
{
S->top++;
S->data[S->top]=x;
return 1;
}
}
int Pop(SeqStack *S,DataType *x)//出栈操作函数
{
if(EmptyStack(S))//调用判空函数EmptyStack(s),判断栈是否为空
{
printf("栈空,取栈顶元素失败!");
return 0;//栈满,不能出栈
}
else//栈不为空
{
*x=S->data[S->top];
S->top--;
return 1;
}
}
int GetTop(SeqStack *S,DataType *x)//取栈顶元素函数
{
if(EmptyStack(S))//调用判空函数EmptyStack(s),判断栈是否为空
{
printf("栈空,取栈顶元素失败!");
return 0;//栈满,不能出栈
}
else//栈不为空
{
*x=S->data[S->top];
return 1;
}
}
void Menu()
{ /*显示菜单子函数*/
printf("\n 顺序栈的各种操作");
printf("\n==================================================");
printf("\n| 1——初始化栈 |");
printf("\n| 2——入栈操作 |");
printf("\n| 3——出栈操作 |");
printf("\n| 4——求栈顶元素 |");
printf("\n| 0——返回 |");
printf("\n==================================================");
printf("\n请输入菜单号(0-4):");
}
main()
{
int i,n,flag;
SeqStack S;
DataType x;
char ch1,ch2,a;
ch1='y';
while(ch1=='y'||ch1=='Y')
{ Menu();
scanf("%c",&ch2);
getchar();
switch(ch2)
{
case '1':
InitStack(&S);
printf("栈的初始化完成!");
break;
case '2':
printf("请输入要入栈的元素个数:");
scanf("%d",&n);
printf("请输入%d个入栈的整数:",n);
for(i=0;i<n;i++)
{
scanf("%d",&x);
flag=Push(&S,x);
}
if(flag==1)
printf("入栈成功!");
break;
case '3':
printf("请输入要出栈的元素个数:");
scanf("%d",&n);
printf("出栈的元素为:");
for(i=0;i<n;i++)
{
flag=Pop(&S,&x);
printf("%5d",x);
}
if(flag==1)
printf("\n出栈成功!");
else
printf("出栈失败!");
break;
case '4':
if(flag=GetTop(&S,&x))
printf("当前的栈顶元素值为:%d",x);
break;
case '0':
ch1='n';break;
default:
printf("输入有误,请输入0-4进行选择!");
}
if(ch2!='0')
{ printf("\n按回车键继续,按任意键返回主菜单!\n");
a=getchar();
if(a!='\xA')
{
getchar();ch1='n';
}
}
}
}
四、程序运行结果
1.运行示例
2.首先需要初始化栈
3. 进行入栈操作,输入5个元素
4. 输入完可以实现线性表的相关功能,如求栈顶元素:
这个要特别说明,因为5是最后放进去的,在最上面。所以它是栈顶;
出栈操作:
五、总结
顺序栈就是进行入栈、出栈,求栈顶元素等功能。这个与循环队伍相类似。
以上为顺序栈的代码、操作步骤,其中代码是我在上学时跟老师所敲的,这是数据结构教材的典型案例;
另外这个程序还有很多欠缺,由于能力有限没能实现,请见谅!若有侵犯,请联系删除!
文中若有不妥之处请谅解!有不明白的请在评论区问哦
本程序是我在上学期间跟老师所写,若有不妥,请谅解!