栈的定义
只能在表尾进行删除或者增添!
形象比喻
几个相关术语
栈顶,栈底,空栈
元素的进栈顺序:a1->a2->a3->a4->a5
元素的出栈顺序:a5->a4->a3->a2->a1
特点:后进先出
Last in First Out
(LIFO) 常用缩写
栈的一些相关操作
常考题
可能先入完栈后再进行出栈
也可能入栈和出栈交错进行
有多种不同的顺序
栈的顺序存储实现
顺序栈的定义
栈的初始化
#include <stdio.h>
#define MaxSize 10
typedef struct
{
int data[MaxSize]; //存放栈中的元素
int top; //栈顶指针(数组下标)
}stack,*Lstack;
void InitStack(Lstack S){
S->top=-1; //初始化栈指针,刚开始0位置没有元素所以先设成-1
}
我的代码和他的不同
因为我是纯c
需要把引用转为指针
进栈操作
bool Push(Lstack S,int a){//入栈操作
if(S->top=MaxSize-1)
return false;
S->top=S->top+1;
S->data[S->top]=a;
return true;
}
出栈操作
bool Put(Lstack S,int *a){
if(S->top==-1)
return false;
*a=S->data[S->top];
S->top-=1;
return true;
}
读取栈顶元素
bool Read(int *a,Lstack S){
if(S->top==-1)
return false;
*a=S->data[S->top];
return true;
}
另一种设计方式
初始指向0
top是下一个数据存放的位置
所以以前想取栈顶位置的都是top-1
共享栈
小结
栈的链式存储的实现
单链表的头插法
类似于进栈操作