数据结构之栈和队列.pptVIP

  • 6
  • 0
  • 约7.09千字
  • 约 35页
  • 2017-06-02 发布于河南
  • 举报
数据结构之栈和队列

第三章 栈和队列 栈和队列是两种特殊的线性表,是操作受限的线性表,称限定性DS 3.1 栈(stack) 栈的定义和特点 定义:限定仅在表尾进行插入或删除操作的线性表,表尾—栈顶,表头—栈底,不含元素的空表称空栈 特点:先进后出(FILO)或后进先出(LIFO) 入栈算法 链栈 Tower of Hanoi问题 问题描述:有A,B,C三个塔座,A上套有n个直径不同的圆盘,按直径从小到大叠放,形如宝塔,编号1,2,3……n。要求将n个圆盘从A移到C,叠放顺序不变,移动过程中遵循下列原则: 每次只能移一个圆盘 圆盘可在三个塔座上任意移动 任何时刻,每个塔座上不能将大盘压到小盘上 3.2 队列 队列的定义及特点 定义:队列是限定只能在表的一端进行插入,在表的另一端进行删除的线性表 队尾(rear)——允许插入的一端 队头(front)——允许删除的一端 队列特点:先进先出(FIFO) 链队列 结点定义 队列的顺序存储结构 实现: 存在问题 设数组维数为M,则: 当front=0,rear=M-1时,再有元素入队发生溢出——真溢出 当front?0,rear=M-1时,再有元素入队发生溢出——假溢出 解决方案 队首固定,每次出队剩余元素向下移动——浪费时间 循环队列 基本思想:把队列设想成环形,让Q[0]接在Q[M-1]之后,若rear+1==M,则令rear=0; 入队算法 出队算法 构造空队列算法 销毁队列算法 front=0 rear=0 1 2 3 4 5 0 队空 1 2 3 4 5 0 front J1,J1,J3入队 J1 J2 J3 rear J4 J5 J6 rear 1 2 3 4 5 0 J4,J5,J6入队 front 设两个指针front,rear,约定: rear指示队尾元素的后一个位置; front指示队头元素 初值front=rear=0 空队列条件:front==rear 入队列:Q.base[ rear++] =x; 出队列:x= Q.base[front ++]; rear rear rear J1 J2 1 2 3 4 5 0 J1,J2,J3出队 J3 front front front front 0 M-1 1 front rear …... …... 实现:利用“模”运算 入队: rear=(rear+1)%M; Q.base[rear]=x; 出队: front=(front+1)%M; x= Q.base[front]; 队满、队空判定条件 * an a1 a2 ……... 栈底 栈顶 ... 出栈 进栈 栈s=(a1,a2,……,an) #define STACK_INIT_SIZE 100; #define STACKINCREAMENT 10; typedef struct{ SELemType *base; SElemType *top; int stacksize; }SqStack; 栈的存储结构 顺序栈 实现:动态 栈顶指针top,指向实际栈顶 后的空位置,初值为top=base top 进栈 A top 出栈 栈满 B C D E F top=base,栈空, 此时出栈,则下溢(underflow) top-base=stacksize,栈满,此时入栈,需重新分配 空间,如空间分配失败则上溢(overflow) top top top top top top top top top top top 栈空 base=0 1 2 3 4 5 0 栈空 top=0 1 2 3 4 5 0 base 1 2 3 4 5 0 A B C D E F base 算法 构造空栈s 返回栈顶元素 if(S.top = = S.base) return ERROR; e=*(S.top-1); 进栈 if(S.top - S.base= S.StackSize) { S.base =(ElemType*) realloc (S.base, S.stacksize+STACKINCREAMENT) * sizeof (ElemType); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+= STACKINCREAMENT; } *S.top++=e; 出栈 if(S.top = = S.base) retuen ERROR; e=*--S.top; 出栈算法 栈顶 ^ …... top data link 栈底 结点定义 入栈算法 出栈算法 typedef struct no

文档评论(0)

1亿VIP精品文档

相关文档