堆栈(Stack):具有一定操作约束的线性表,即只在一端(栈顶,Top)做插入,删除。
- 插入数据:入栈(Push)
- 删除数据:出栈(Pop)
- 先入后出原则:Last In First Out
- 示例图:
栈的顺序存储实现:
栈的顺序存储实现通常由一个一维数组和一个记录栈顶元素位置的变量组成。
#define MAXSIZE 最大个数
typedef struct Stack{
ElementType Data[MAXSIZE];
int Top;
};
Stack *PtrS;
- 1.初始化操作:
Stack *MakeEmpty(Stack *PtrS){ //初始化栈 Stack *p; p = (Stack *)malloc(sizeof(Stack)); //分配Stack大小的空间 PtrS = p; PtrS->Top = -1; return PtrS; }
- 2.入栈操作:
Stack *Push(int x, Stack *PtrS){ //入栈 if(PtrS->Top == MAXSIZE - 1){ cout<<"栈满"; return NULL; } else{ //入栈操作 PtrS->Data[++(PtrS->Top)] = x; return PtrS; } }
- 3.出栈操作:
int Pop(Stack *PtrS){ //出栈 if(PtrS->Top == -1){ cout<<"栈空"; return -1; } else{ //不为空则出栈 return PtrS->Data[(PtrS->Top)--]; } }