一、定义:栈是限定尽在一端插入或删除操作的线性表。“后进先出(LIFO)”。
二、习惯上称栈的可访问元素为站栈顶(top)元素,元素插入栈称为入栈(push),删除元素称为出栈(pop)。
三、顺序栈:
l 顺序栈在建立栈的时候必须说明一个固定长度。
l 当栈中有n个元素时把位置n-1作为栈顶,Top位置不存放值。
l 实现如下:
#include<stdio.h>#define MAXSIZE 100
typedef char datatype;
typedef struct
{
datatype S[MAXSIZE];
int top;
} SeqStack;
SeqStack ST;
datatype x;
void push(SeqStack *ST,datatype x);//压入栈中
char pop(SeqStack *ST);//出栈
int stackEmpty(SeqStack ST);//判断栈是否为空
void clearStack(SeqStack *ST);//清空栈
datatype getTop(SeqStack *ST);//获取栈顶元素
int main()
{
clearStack(&ST);
int i;
datatype y;
printf("请输入1个元素压入栈中:\n");
scanf("%c",&y);
push(&ST,y);
if(!stackEmpty(ST))
{
printf("栈非空!表明压入了元素!\n");
}
else
{
printf("为空栈!\n");
}
datatype z;
z=getTop(&ST);
printf("栈顶元素为:%c\n",z);
z=pop(&ST);
printf("弹出 的元素为:%c\n",z);
if(!stackEmpty(ST))
{
printf("栈非空!\n");
}
else
{
printf("为空栈!\n");
}
}
void push(SeqStack *ST,datatype x)
{
printf("此时栈顶%d\n",ST->top);
if(ST->top>=MAXSIZE-1)
{
printf("overflow");
}
else
{
ST->S[++ST->top]=x;
}
}
datatype pop(SeqStack *ST)
{
printf("此时栈顶为%d",ST->top);
if(ST->top==-1)
{
printf("underflow!");
}
else
{
return x=ST->S[ST->top--];
}
}
int stackEmpty(SeqStack ST)
{
if(ST.top==-1)
return 1;
else return 0;
}
void clearStack(SeqStack *ST)
{
ST->top=-1;
}
datatype getTop(SeqStack *ST)
{
if(ST->top==-1)
{
printf("该栈为空!");
}
else
{
return ST->S[ST->top];
}
}
运行结果如下图: