链式队列知识点


本节概述 本节知识点 本节总结

二、链式队列
    链式队列一般用单链表方式存储队列,其中链接指针的方向是从队列的前端向尾端链接。
    链式队列的类定义如下:
Class Queue {
// linked Queue,单链表,其结点类型为ListNode
private:
      ListPtr front,rear;
      int curr_len;
public:
      //  创建一个空队列,不用指定最大长度
      Queue::Queue() {
             front = rear = NULL;
             curr_len = 0;
      };
      …
};
    将元素加入队列前端算法如下:
void Queue::EnQueue( ELEM item) {
       ListPtr temp;
       temp = new ListNode;
       assert(!temp==NULL);       // 若无存储空间则异常
       temp->data = item;
       temp->link = NULL;
       if (curr_len != 0) {    // 队列尾端指针rear非NULL
             rear->link = temp;
             rear = temp;     // 新队列尾端指针
      }
      else
             // 只有一个结点时,队列前端和尾端指针相同
             front = rear = temp;
     curr_len++;
}
    自单链队列前端取出
ELEM Queue:: DeQueue() {
         // 判队列非空,否则队空异常退出
        assert(curr_len != 0);
        // 暂存队列顶内容
       ELEM result = front->data;
       ListPtr temp;
       temp = front;              // 老前端指针
       front = front->link ;   // 新前端指针
       delete temp;
       curr_len--;
       if  (curr_len == 0)
             rear = front = NULL;
       return result;
}