栈的顺序存储结构简称为顺序栈,本实验通过数组来实现顺序栈。
栈空并不能表示使用的数组也为空
栈满一定表示所用数组已满
顺序栈的说明:可以阅读堆栈或者其他文章进行了解。
步骤说明在注释里
步骤说明在注释里
步骤说明在注释里
代码部分
#include <stdio.h>
#define STACK_INTSIZE 50 /*设定栈的最大存储空间*/
typedef char DataType; /*在此例中栈中的数据类型采用字符类型*/
typedef struct /*定义数据类型*/
{ DataType s[STACK_INTSIZE]; /*数组实现*/
int top; /*栈顶指针,指示当前栈顶的位置*/
}Stack;
//入栈函数
void Push(Stack* st,DataType x)
{ if(st->top== STACK_INTSIZE-1)printf("\n\t\t\t栈已满,不能入栈!");/*栈顶指针表示的位置在最后,表示栈满*/
else
{
st->top++; /*栈顶指针计数加一*/
st->s[st->top]=x; /*存入数据*/
}
}
//出栈函数
void Pop(Stack* st)
{ DataType x;
if(st->top==0) printf("\n\t\t\t栈空,不能出栈!\n");/*判断是否栈空*/
else
{ x=st->s[st->top]; /*读取栈顶元素*/
printf("\n\t\t\t出栈元素为:%c\n",x);
st->top--; /*栈顶指针指示位置减一*/
}
}
//读取函数
DataType ReadTop(Stack* st) /*显示栈顶元素的值*/
{
DataType x;
if(st->top==0) /*判断是否栈空*/
{
printf("\n\t\t\t栈中无元素");
return(0);
}
else
x=st->s[st->top]; /*读取栈顶元素*/
return(x); /*返回栈顶元素*/
}
//显示函数
void ShowStack(Stack* st) /*显示栈中的所有元素*/
{ int x;
x=st->top; /*读取栈顶指针指示的位置*/
if(x==0) printf("\n\t\t\t栈为空!\n"); /*若为0表示栈空*/
else
{ printf("\n\t\t\t栈元素为:");
while(x!=0)
{ printf("%6c",st->s[x]); /*若不为0读出元素*/
x--; /*位置减一*/
}
}
}
//主函数
void main()
{ Stack st; /*建立顺序栈st*/
int i=1;
char choice;
DataType x; /*字符变量x*/
DataType s[STACK_INTSIZE]; /*字符数组s*/
st.top=0; /*栈顶指针指示位置置为0*/
while(i)
{ printf("\n\n\n\n");
printf("\t\t\t-- 顺 序 栈--\n");
printf("\n\t\t\t**************************************");
printf("\n\t\t\t* 1-------入 栈 *");
printf("\n\t\t\t* 2-------出 栈 *");
printf("\n\t\t\t* 3-------读栈顶元素 *");
printf("\n\t\t\t* 4-------显示栈元素 *");
printf("\n\t\t\t* 0-------退 出 *");
printf("\n\t\t\t**************************************\n");
printf("\t\t\t请选择菜单号(0--4):");
scanf("%c",&choice);getchar( );
if(choice=='1')
{ printf("\n\t\t\t请输入要入栈的字符x:");
scanf("%c",&x); getchar( );
Push(&st,x); /*调用入栈函数*/
}
else if(choice=='2')
Pop(&st); /*调用出栈函数*/
else if(choice=='3')
{ x=ReadTop(&st);
printf("\n\t\t\t当前栈顶元素的值是:%c",x);
}
else if(choice=='4')
ShowStack(&st); /*调用显示栈顶元素的值的函数*/
else if (choice=='0')
{ i=0;
printf("\n\t\t\t程序结束!\n");
}
else printf("\n\t\t\t输入错误!请重新输入!\n");
}
}
截图检验部分
入栈:a,b,c,d
函数缺陷:每次都要输入1之后入栈,可以改为循环输入;
出栈:d
显示栈顶元素:c
显示所有元素:c b a
退出:0
本文代码均为博主的老师传授和自身理解
写稿不易,感谢支持!