数据结构 笔记4 栈和队列

栈(stack)

是限定在表的一端进行插入和删除运算的线性表。

插入,删除的一段称为栈顶(top),另一端为栈底(buttom)。

不含元素的空表称为空栈。

栈又被称为后进先出(Last In First Out)的线性表

 

栈的顺序结构(顺序栈)

1.栈的顺序存储结构称为顺序栈。

2.当栈满时再做进栈运算必定产生控件溢出,简称“上溢”

3.当栈空时再做退栈运算也将产生溢出,简称“下溢”

 

3.栈的链式存储结构(栈链)

1.为了 克服顺序存储结构分配固定空间所产生的溢出和空间浪费问题,采用链式存储结构来存储栈

 

栈有一个非常重要的应用是在程序设计语言中实现递归,一个直接调用自己或者间接调用自己的函数,称之为递归函数。

递归算法的设计分为两步:

1.将规模较大的问题分解为一个或多个规模较小的而又类似于原问题特性的子问题,即将较大问题递归地用较小的子问题来描述,解原问题的方法同样可以用来解决子问题。

2.是确定一个或多个不需要分解,可直接求解的最小子问题。

第一步称为递归步骤,第二部中最小子问题称为递归的终止条件

 

队列(Queue)

1队列也是一种操作受限的线性表,它只允许在表的一端插入,而另一端进行元素删除,允许插入的一段称为队尾(rear),允许删除的一端称为对头(front

2.元素的插入称为入队,元素删除称为出队

3.队列又称为先进先出(First In First Out)表

 

顺序循环队列

队列的顺序存储结构称为顺序结构

为了充分利用数字空间,克服上溢,可将数组空间想象为一个环状空间,称这种环状数组表示的队列为循环队列

一般情况下真正实用的顺序队列是循环队列。

判断顺序循环队列是否为“满”的三种方法:

1.灵设一个标识位,以区别队列是“空”还是“满”

2.设置一个计数器记录队列中的元素个数

3.少用一个元素空间,约定入队前,测试尾指针在循环意义下加1后是否等于头指针,若相等则认为队列满,即尾指针Q.rear所指向的单元始终为空。

c语言代码:

int QueueFull(CirQueue *q) {
  return (Q->rear + 1) % QueueSize == Q->front;        
}

 

链队列

1.队列的链式存储结构称为链队列

2.链队列一般不带头结点

posted @ 2016-05-10 00:19  sz_zzm  阅读(232)  评论(0)    收藏  举报