|
二、链式队列
链式队列一般用单链表方式存储队列,其中链接指针的方向是从队列的前端向尾端链接。
链式队列的类定义如下:
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;
}
|