- 4
- 0
- 约6.56千字
- 约 37页
- 2018-05-14 发布于四川
- 举报
* #define M 1000 QElemType QUEUE[M]; int front, rear; 类型定义 * 队列的链式存储结构是用一个线性链表 表示一个队列,指针front与rear分别指向实 际队头元素与实际队尾元素所在的链结点。 3.6 队列的链式存储结构 一.构造原理 rear指出实际队尾元素所在的位置; front指出实际队头元素所在位置的前一个位置。 约定 链接队列 链队 front与rear分别指向实际队头和队尾元素 * 空队对应的链表为空链表,空队的标志是 front = NULL 在一个初始为空的链接队列中依次插入 数据元素 A, B, C, D 以后, 队列的状态为 例 ^ D C B A front rear 队尾元素 队头元素 * class node { QElmeType data; node *link; }; node QNode, *QLink; 类型定义 * void INITIALQ(node *front, node *rear) { front=NULL; rear=NULL; } int EMPTYQ(node *front) { return front==NULL; } 队空,返回1 否则,返回0 二.基本算法 1. 初始化队列 2. 测试队列是否为空 * p item ^ front rear … front rear p item ^ rear-link=p; rear=p; 为什么 分两种情况 3. 插入(进队) front=rear=NULL 1 初始队列为空 2 初始队列非空 * int ADDLINKQ( node *front, node *rear, QElemType item ) { node *p; if(!(p=new node())) /* 申请链结点 */ return 0; p-data=item; p-link=NULL; if(front==NULL) front=p; /* 插入空队的情况 */ else rear-link=p; rear=p; /* 插入非空队的情况 */ return 1; } 算法 * … front rear ^ int DELLINKQ( node *front, node *rear, QElemType item ) { node *p; if( EMPTYQ(front) ) return 0; /* 队列为空,删除失败 */ else{ p=front; front=front-link; item=p-data; delete(p); return 1; /* 队列非空,删除成功 */ } } 算法 front=front-link; 4. 删除(出队) * 所谓销毁一个队列是指将队列所对应的链表中所有结点都删除,并且释放其存储空间,使队列成为一个空队(空链表)。 … ^ front rear 归结为一个线性链表的删除 5. 销毁一个队列 * … ^ list … ^ list p list p list p list p list list p list list=NULL p=list; list=list-link; 一个线性链表的删除 * void DESLINKQ(node *front, node *rear) { while(front){ /* 队列非空时 */ p=front-link; delete(front);
原创力文档

文档评论(0)