数据结构链队列.docx
- 文档编号:3000544
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:5
- 大小:16.09KB
数据结构链队列.docx
《数据结构链队列.docx》由会员分享,可在线阅读,更多相关《数据结构链队列.docx(5页珍藏版)》请在冰豆网上搜索。
数据结构链队列
链队列
1、链队列的定义
队列的链式存储结构简称为链队列。
它是限制仅在表头删除和表尾插入的单链表。
2、链队列的基本运算
(1)置空队
voidInitQueue(LinkQueue*Q)
{
Q->front=Q->rear=NULL;
}
(2)判队空
intQueueEmpty(LinkQueue*Q)
{
returnQ->front==NULL&&Q->rear==Null;
//实际上只须判断队头指针是否为空即可
}
(3)入队
voidEnQueue(LinkQueue*Q,DataTypex)
{//将元素x插入链队列尾部
QueueNode*p=(QueueNode*)malloc(sizeof(QueueNode));//申请新结点
p->data=x; p->next=NULL;
if(QueueEmpty(Q))
Q->front=Q->rear=p; //将x插入空队列
else{//x插入非空队列的尾
Q->rear->next=p; //*p链到原队尾结点后
Q->rear=p; //队尾指针指向新的尾
}
}
(4)出队
DataTypeDeQueue(LinkQueue*Q)
{
DataTypex;
QueueNode*p;
if(QueueEmpty(Q))
Error("Queueunderflow");//下溢
p=Q->front; //指向对头结点
x=p->data; //保存对头结点的数据
Q->front=p->next; //将对头结点从链上摘下
if(Q->rear==p)//原队中只有一个结点,删去后队列变空,此时队头指针已为空
Q->rear=NULL;
free(p); //释放被删队头结点
returnx; //返回原队头数据
}
(5)取队头元素
DataTypeQueueFront(LinkQueue*Q)
{
if(QueueEmpty(Q))
Error("Queueifempty.");
returnQ->front->data;
}
注意:
①和链栈类似,无须考虑判队满的运算及上溢。
②在出队算法中,一般只需修改队头指针。
但当原队中只有一个结点时,该结点既是队头也是队尾,故删去此结点时亦需修改尾指针,且删去此结点后队列变空。
③以上讨论的是无头结点链队列的基本运算。
和单链表类似,为了简化边界条件的处理,在队头结点前也可附加一个头结点,增加头结点的链队列的基本运算【参见练习】
假设数据元素为int型
大概的函数如下所示:
功能函数没怎么写注释,如果你不是很懂的话可以看下书,或者拿只笔出来画画,只是你对这个还没能够明白才不懂的,你把单链表的创建删除过程在纸上一画就会慢慢熟悉明白了的
#include
usingnamespacestd;
structNode
{
intdata;
Node*next;//链表节点的结构
};
structQueue
{
Node*front;
Node*rear;
};//队列的首尾指针
intSetnull(Queue&Q)
{
Q.front=Q.rear=newNode;//将队列置空也是初始化
if(!
Q.front)
return0;
Q.front->next=NULL;
return1;
}
intempty(QueueQ)
{
if(Q.front==Q.rear)
return1;
else
return0;
}
intgetfirst(Queue&Q)
{
if(empty(Q))
{
cout<<"thequeueisempty!
"< return0; } else returnQ.front->next->data; } intenqueue(Queue&Q) { Node*p; intelem; cout<<"输入一个要进队列的数"< cin>>elem; p=newNode; if(! p) return0; p->data=elem; Q.rear->next=p; Q.rear=p; Q.rear->next=NULL; return1; } intdel(Queue&Q) { if(empty(Q)) { cout<<"Thequeueisempty! "< return0; } else { Node*p; p=Q.front->next; Q.front->next=p->next; if(Q.rear==p) Q.rear=Q.front; deletep; return1; } return1; } voidtraverse(QueueQ) { Q.front=Q.front->next; while(Q.front) { cout< Q.front=Q.front->next; } cout< } voidshowTable(QueueQ) { system("cls");//清屏的作用 cout<<"======================================"< cout<<"1----入队"< cout<<"2----出队"< cout<<"3----将队列置空"< cout<<"4----队列第一个元素"< cout<<"5----退出"< cout<<"======================================"< if(empty(Q)) { cout<<"目前队列内没有元素,为空,选择1向队列内输入元素"< } else { cout<<"当前队列内的元素是: "; traverse(Q); } cout< cout<<"请给出你的选择: "; } voidmain() { QueueQ; Setnull(Q); boolflag=true; charch; while(flag) { showTable(Q); cin>>ch; if(ch=='1') { enqueue(Q); } elseif(ch=='2') { del(Q); } elseif(ch=='3') { Setnull(Q); cout<<"队列被置空"< } elseif(ch=='4') { cout<<"队列的第一个元素是"< } elseif(ch=='5') { flag=false; cout<<"用户选择退出……"< } else { cout<<"输入错误,请重新输入"< } system("pause"); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 队列
![提示](https://static.bdocx.com/images/bang_tan.gif)