数据结构之第三章之队列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构之第三章之队列相关的知识,希望对你有一定的参考价值。
1~~队列的特点:队列是限定仅在表尾进行插入和表头进行删除操作的线性表,是先进先出的线性表。
1~~循环队列
(1)循环队列的循环表示
typedef struct { int *base;//初始化的动态分配存储空间 int front;//头指针,若队列不为空,指向队列头元素 int rear;//尾指针,若队列不空,指向队列尾元素的下一个位置 }QUEUE;
若队列不空,尾指针始终指向队列尾元素的下一个位置,也即尾指针始终是"空闲的“,可以起到分隔作用。
2~~~入队
int enqueue(QUEUE head,int e){
//插入元素e为head的新的队尾元素
if((head.rear+1)%MAXQSIZE==head.front)
return 0;//队列满
head.base[head.rear]=e;
head.rear=(head+1)%MAXQSIZE;
return 1;
}
3~~~出队
int deletequeue(QUEUE head,int e){ //若队列不空,则删除队列head的队头元素,则用e返回 if(head.front==head.rear) return 0; e=head.base[head.front]; head.front=(head.front+1)%MAXQSIZE; return 1; }
4~~~判队空
bool queueempty(QUEUE head){ //若队列不空,返回false,否则,返回true if(head.rear==(head.front+1)%MAXQSIZE) return true; else return false; }
5~~~判队满
bool isfullqueue(QUEUE head){ //若队列为满,则返回true,否则返回false; if(head.front==((head.rear+1)%MAXQSIZE)) return true; else return false; }
2链式队列
(1)链式队列的存储表示
typedef struct Qnode{ int data; struct Qnode *next; }NODE,*QNODE; typedef struct{ QNODE front;//对头指针 QNODE rear;//队尾指针 }LINKQUEUE;
链队列包含头指针和尾指针和头节点,当头指针和尾指针相等时,判定链队列为空;
删除队列头元素时,一般情况下,仅需修改头节点的指针,但当队列中只有最后一个元素被删除后,队列尾指针也将丢失,因此需对队列尾指针重新赋值,而元素入队时,只需修改尾指针。
(2) 入队(Enqueue)
int Enqueue(LINKQUEUE Q,int e){ //插入元素为e为Q的新的队尾元素 newbase=(QNODE)malloc(sizeof(NODE)); if(!newbase) exit(-1); newbase->data=e; newbase->next=NULL; Q.rear->next=newbase; Q.rear=newbase; return 1; }
(3)出队
int deletequeue(LINKQUEUE Q,int e){ //若队列不空,则删除Q的队头元素,用e返回其值 if(Q.front==Q.rear) return 0; newbase=Q.front->next; e=newbase->data; Q.front->next=newbase->next; if(Q.rear==newbase) Q.rear=Q.front; free(newbase); return 1; }
(4)判队列
bool queueempty(LINKQUEUE Q) { //若队列空,返回true,否则返回false if(Q.front==Q.rear) return true; else return false; }
以上是关于数据结构之第三章之队列的主要内容,如果未能解决你的问题,请参考以下文章
(王道408考研数据结构)第三章栈和队列-第三节1:栈的应用之括号匹配问题和表达式问题(前缀中缀和后缀)
(王道408考研数据结构)第三章栈和队列-第三节2:栈的应用之递归
Java数据结构学习笔记之二Java数据结构与算法之队列(Queue)实现