栈
栈的基本概念: 1.只能在一端进行插入,删除操作的线性表 2.当栈没有元素的时候称为空栈 栈的特点:先进后出 栈能适用于递归算法,表达式求职以及括号匹配等问题 | 有n个元素按照某种顺序入栈,则出栈方式有1/(N+1)*C(n,2n)。 | ||||
栈的基本操作
| |||||
栈的存储结构 顺序栈(顺序存储)的结构 1.栈空时 栈顶指针top=-1 栈满时 top=MAXSIZE-1 顺序栈的基本操作 1.初始化 2.判断栈是否为空 (bool类型) 3.进栈 栈不满时, 栈顶指正先加1, 再送值到栈顶元素 4.出栈 栈非空时 先去栈顶元素之=值 再讲栈顶指正减1 | #define MaxSize 50 typedef struct{ ElemType data[Maxsize]; int top;//整数型指针 } void InitStack(SqStack &S){ bool StackEmpty(SqStack S){ if top==-1 return true; else return false; bool Push(SqStack &S,ElemType x){ if (S.top==Maxsize-1) return false; else S.data[++S.top]=x; return true; } bool Pop(SqStack &S,ElemType x){ if (S.top==-1) return false; else x=S.data[S.top--]; return true; } | ||||
共享栈 栈满:top0+1=top1 | |||||
栈的链式结构 链式栈 便于多个栈共享存储空间和提高效率, 且不存在栈满上溢的情况 | typedef struct LinkNode{ elemtype data; struct LinkNode *next; } |
队列
队列的基本概念: 只允许在表的一端进行插入,而在表的另一端进行删除。 队头出队,队尾入队 特性:先进先出 | |||||||||
队列的基本操作
| |||||||||
队列的顺序存储
| |||||||||
循环队列 把存储队列元素的表从逻辑上视为一个圆 最大容量:Maxsize-1
队空条件:Q.front==Q.rear 牺牲一个单元来区分队空和堆满 队满条件:(Q.rear+1)%MAXSIZE==Q.front | | ||||||||
队列的链式存储结构 |