堆栈:LIFO结构
1.按一定顺序进栈然后所有出栈顺序的可能性:
核心:出栈的第一个元素是在原来的次序中是第几个,那么比它先入栈的元素,出栈顺序必须是逆序
因为从小到大入栈顺序是确定的,而出栈是随机的,也就是在入栈还没结束的情况下就可以出栈。这样,就会出现一些小的数提前出栈的现象。但是那些“守规矩”的小数相对位置是没有变化的。比如入栈12345,结果在4入栈之前3不听话先出去了。但是这不会影响1和2的顺序,1和2的相对顺序还是保持着 12入栈,21出栈。因为12是守规矩的。
eg. ABCD顺序进栈,有14种出栈可能性
2.顺序存储结构通常由一个一维数组和一个记录栈顶元素位置的变量组成:
注意:void不代表没有返回类型,只是返回类型为空。如果return ;在方法体中间,表示退出方法的意思,后面的代码就不执行了。
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
#define ERROR -1
typedef int ElemType;
typedef struct SNode *Stack;
struct SNode{
ElemType data[MAXSIZE];
int top;
};
以下为函数的实现:
void Push(Stack S,ElemType e){
if(S->top==MAXSIZE-1){
printf("栈满");
return ;
}else{
S->data[++(S->top)]=e;
return ;
}
}
ElemType Pop(Stack S){
if(S->top==-1){
printf("栈本空");
return ERROR;
}else{
return (S->data[--(S->top