栈:只允许在一端进行删除插入的线性表
操作特性:后进先出(Last in First out)(LIFO)
栈的数学性质:n个不同元素进栈,出栈序列的个数为卡特兰数:1/(n+1)*Cn2n
顺序栈:采用顺序存储的栈
基本操作:(为了方便操作,此处只能输入数字)
特别注意:初始化栈的时候:S.top的值是为-1还是0。对后面操作有影响
#include#include #include #define MAXSIZE 50 typedef int Elemtype; typedef struct{ Elemtype data[MAXSIZE]; int top; }SqStack; //初始化栈 void InitStack(SqStack &S){ S.top = -1;//栈顶指针指向当前栈顶元素的位置,也可以等于0,表示栈顶元素的下一位 } //判断栈空? bool Stack_empty(SqStack S){ if(S.top==-1){ return true; }//栈空 else{ return false; }//不空 } //进栈 bool Push(SqStack &S){ int e; if(S.top == MAXSIZE-1){//判断栈是否满 return false; } while(e!=1111){ S.data[++S.top] = e;//由于指针指向栈顶,所以要先对指针先加1到0位置 scanf("%d",&e); } return true; } //出栈 bool Pop(SqStack &S,Elemtype e){ if(S.top == -1){//判断是否为空 return false; } e = S.data[S.top--];//当前top指针指向的栈顶只有数据的,所以先出栈再减1 return true; } //读取栈顶元素 int Get_top(SqStack &S,Elemtype &e){ if(S.top == -1){//判断是否为空 return false; } e = S.data[S.top]; return e; } //打印栈 void printStack(SqStack &S){ for(int i=1;i<=S.top;i++){ printf("%d ",S.data[i]); } } int main(){ SqStack S; int e; InitStack(S); printf("n入栈n"); Push(S); printStack(S); printf("n"); printf("n出栈n"); Pop(S,e);//出栈栈顶元素 printStack(S); printf("n栈顶元素n") ; printf("n"); printf("%d",Get_top(S,e)); }
)



