数据结构--三、四---栈和队列

===栈===

  栈:只能从表的一端存取数据,另一端是封闭的,遵循先进先出原则。

===栈的实现===

  1.顺序栈----数组

  2.链栈---链式存储

===栈的应用===

  1.浏览器的“回退”功能

===顺序栈元素“入栈”===

  1.栈是空栈,top 值为初始值-1,之后向栈中添加元素,默认数组下标为0的一段表示栈底,依次,元素1被存储在数组1[0]处,top 值+1.

  2. top 值的设定主要是针对出栈设定的。

===链栈===

  1.链栈的实现思路同顺序栈类似,顺序栈是将顺序表的一段作为栈底,另一端为栈顶。

===队列===

  队列,和栈一样,也是一种对数据的“存”和“取”有严格要求的线性存储结构。

  要求:先进先出。

===队列的实现===

  由于顺序队列的底层使用的是数组,因此需预先申请一块足够大的内存空间初始化顺序队列。除此之外,为了满足顺序队列中数据从队尾进,队头出且先进先出的要求,我们还需要定义两个指针:top 和rear,分别用于指向顺序队列中的队头元素和队尾元素。

由于顺序队列初始状态没有存储任何元素,因此top 指针和rear 指针重合,且由于顺序队列底层实现靠的是数组,因此top 和 rear 实际上是两个变量,它的值分别是队头元素和队尾元素所在数组位置的下标。

  当有数据元素进队列时,对应的实现操作是将其存储在指针rear 指向的数组位置,然后rear +1,当需要队头元素出队时,仅需做 top +1 操作。

  出现的问题:会使得指针top 和rear重合位置不断后移,造成的结果:

  1. 顺序队列之前的数组存储空间将无法再被使用,造成了空间浪费;

  2.如果顺序表申请的空间不足够大,则直接造成程序中数组a 益出,产生益出错误。

===改良方案===

  1.将顺序表打造成一个换状表

===链式队列:使用链表实现的队列存储结构===

  链式队列的实现思路同顺序队列类似,只需创建两个指针(命名为top 和 rear),分别指向链表中队列的队头元素和队尾元素。

  入队:1. 将该数据元素用节点包裹,例如:新节点名称为elem

     2. 与rear指针指向的节点建立逻辑关系,即执行rear -> next = elem;

       3. 最后移动rear 指针指向该新节点,即rear = elem;

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

posted on 2020-02-29 20:17  萧橘子  阅读(174)  评论(0编辑  收藏  举报

导航