1、顺序栈:利用顺序存储方式表示的栈。
2、栈中的数据元素可用一维数组来实现:datatype data[MAXSIZE],栈底位置可以设置数组的任意端点,栈顶则是随着入栈、出栈(插入和删除)而变化的,通常以下表0的一端表示栈底,用一个位置指针top作为栈顶。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h> //用户通过键盘产生对应操作
#define MAXSIZE 20
#define datatype char
//结构定义
typedef struct
{
datatype data[MAXSIZE];
int top;
}SeqStack;
//初始化
void InitStack(SeqStack *s)
{
s->top=-1;
}
//入栈
int Push(SeqStack*s,datatype x)
{
if(s->top==MAXSIZE-1) //栈满,不能入栈
return 0;
else
{
s->top++;
s->data[s->top]=x; //插入数据元素X赋值给栈顶空间
return 1;
}
}
//出栈
int Pop(SeqStack*s,datatype*x)
{
if(s->top==-1) //空栈不能出栈
return 0;
else
{
*x=s->data[s->top]; //栈顶元素存入*x
s->top--;
return 1;
}
}
//求长度
int Len(SeqStack*s)
{
int length;
length=s->top+1;
return length;
}
//取栈顶元素
int GetTop(SeqStack*s,datatype*x)
{
if(s->top==-1)
return 0;
*x=s->data[s->top];
return 1;
}
//菜单页面
char menu(void)
{
char ch;
printf(" 顺序栈操作\n ");
printf("-----------------\n");
printf(" 选择操作选项\n ");
printf(" 0.初始化\n ");
printf(" 1.入栈\n ");
printf(" 2.出栈\n ");
printf("3.取栈顶元素\n ");
printf(" 4.长度\n ");
printf(" 5.退出\n ");
printf("-----------------\n");
printf("输入选项:");
ch=getchar();
return(ch);
}
void main()
{
SeqStack st;
int l,k,flag=1;
datatype x;
char choice;
InitStack(&st);
do{ choice=menu();
switch(choice)
{
case'0':
InitStack(&st);
printf("初始化成功!\n");
getchar();
break;
case'1':
printf("请输入入栈数据:");
scanf("%d",&x);
k=Push(&st,x);
if(k) printf("入栈成功!\n");
else printf("栈已满!\n");
getchar();
break;
case'2':
k=Pop(&st,&x);
if(k) printf("出栈数据=%d\n",x);
else printf("栈为空!\n");
getchar();
break;
case'3':
k=GetTop(&st,&x);
if(k) printf("栈顶元素=%d\n",x);
else printf("栈为空!\n");
getchar();
break;
case'4':
l=Len(&st);
printf("长度为:%d\n",l);
getchar();
break;
case'5':flag=0;break;
}
}while(flag==1);
}