顺序栈实验 seqstack ( 注释超详细的) C语言版

栈的顺序存储结构简称为顺序栈,本实验通过数组来实现顺序栈。

栈空并不能表示使用的数组也为空
栈满一定表示所用数组已满

顺序栈的说明:可以阅读堆栈或者其他文章进行了解。

步骤说明在注释里
步骤说明在注释里
步骤说明在注释里

代码部分
#include 

#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之后入栈,可以改为循环输入;
顺序栈实验 seqstack ( 注释超详细的) C语言版_第1张图片
出栈:d
顺序栈实验 seqstack ( 注释超详细的) C语言版_第2张图片
显示栈顶元素:c
顺序栈实验 seqstack ( 注释超详细的) C语言版_第3张图片
显示所有元素:c b a
顺序栈实验 seqstack ( 注释超详细的) C语言版_第4张图片
退出:0
顺序栈实验 seqstack ( 注释超详细的) C语言版_第5张图片
本文代码均为博主的老师传授和自身理解

写稿不易,感谢支持!

你可能感兴趣的:(数据结构,堆栈,数据结构,c语言)