天天看点

第三章 栈和队列3.1栈3.2队列

3.1栈

  • 栈是限定仅在表尾进行插入和删除操作的线性表。允许插入删除的一段称为栈顶(top),另一端称为栈底(bottom),不含任何元素的栈陈给空栈。

3.1.1顺序栈

  • 把数组下标为0的一段作为栈底,定义变量top来只是栈顶元素在顺序栈中的位置,top为整型。
  • top的初始值为-1,指向栈底,而这个top=-1也可作为栈空的标志。
  • 进栈时,top先+1,再把入栈的元素放到top指针指向的位置。删除栈顶元素时,先删除栈顶,再把top-1
  • 第三章 栈和队列3.1栈3.2队列

3.1.2链栈

  • 数据域——存储其本身的信息
  • 指针域——存储一个指示其直接后继的信息,即直接后继的存储位置

3.2队列

  • 队列是一种运算受限制的线性表,元素的添加操作在表的一端进行,删除操作在表的另一端进行。允许插入的一段称为队尾(rear),允许删除的一端称为队头(front)

3.2.1顺序队列

  • 在非空队列中,头指针始终指向队列头元素的前一个位置,尾指针始终指向尾元素的位置

3.2.1.1.循环队列:

  • 加入元素F,则队尾指示器加1操作修改为:
  • rear = (rear+1)%queueArray.length
  • 退出元素F,则队头指示器加1操作修改为:
  • front = (front+1)%queueArray.length
  • 另外,队中元素长度:
  • (rear-front+queueArray.length)%queueArray.length
  • 判断队列空/满:(允许队列最多只能存放ququeArray.length-1个元素)
    • 满?(rear+1)%queueArray.length == front
    • 空?rear==front

3.2.2链队列

  • 空队列的判定条件是头指针和尾指针均指向头结点,即front=rear
  • 入队操作,修改队尾指针:rear.next=p
  • 出对操作,修改队头指针:front.next=front.next.next
  • 第三章 栈和队列3.1栈3.2队列