c语言中有队列头文件吗,C语言队列学习竟是如此简单!你,懂了嘛?
一、何為隊(duì)列?
隊(duì)列 (Queue) :是一種先進(jìn)先出 (First In First Out ,簡(jiǎn)稱 FIFO) 的線性表,也是運(yùn)算受限的線性表。只允許在表的一端進(jìn)行插入,而在另一端進(jìn)行刪除。
隊(duì)首 (front) :允許進(jìn)行刪除的一端稱為隊(duì)首。
隊(duì)尾 (rear) :允許進(jìn)行插入的一端稱為隊(duì)尾。
隊(duì)列中沒有元素時(shí)稱為空隊(duì)列。在空隊(duì)列中依次加入元素 a 1 , a 2 , …, a n 之后, a 1 是隊(duì)首元素, a n 是隊(duì)尾元素。顯然退出隊(duì)列的次序也只能是 a 1 , a 2 , …, a n ,即隊(duì)列的修改是依先進(jìn)先出的原則進(jìn)行的,如圖 3-5 所示。
二、基本操作創(chuàng)建新隊(duì)列
判空
進(jìn)隊(duì)
出隊(duì)
清空隊(duì)
獲得隊(duì)頭元素
遍歷隊(duì)
銷毀隊(duì)
隊(duì)長(zhǎng)
三、隊(duì)列的存儲(chǔ)實(shí)現(xiàn)及運(yùn)算實(shí)現(xiàn)
與線性表、棧類似,隊(duì)列也有順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)兩種存儲(chǔ)方法。
1.順序隊(duì)列
循環(huán)隊(duì)列的類型定義如下:
#define MAXQSIZE 100 //最大隊(duì)列長(zhǎng)度
typedef struct {
QElemType *base; //動(dòng)態(tài)分配存儲(chǔ)空間
int front; //頭指針,若隊(duì)列不空,指向隊(duì)列頭元素
int rear; //尾指針,若隊(duì)列不空,指向隊(duì)列尾元素的下一個(gè)位置
} SqQueue;
下面是循環(huán)隊(duì)列上基本操作的實(shí)現(xiàn)。
(1)入隊(duì):
int EnQueue (SqQueue &Q, QElemType e) {
if((Q.rear+1)%MAXQSIZE == Q.front) return ERROR;
Q.base[Q.rear] = e;
Q.rear = (Q.rear+1) % MAXQSIZE;
return OK;
}
(2)出隊(duì):
int DeQueue (SqQueue &Q, QElemType &e) {
if (Q.front = = Q.rear) return ERROR;
e = Q.base[Q.front];
Q.front = (Q.front+1) % MAXQSIZE;
return OK;
}
(3)求循環(huán)隊(duì)列元素個(gè)數(shù):
int QueueLength(SqQueue Q){
return (Q.rear-Q.front+MAXQSIZE) %MAXQSIZE;
}
2.鏈隊(duì)列
鏈?zhǔn)酱鎯?chǔ)的隊(duì)稱為鏈隊(duì)列。和鏈棧類似,用單鏈表來實(shí)現(xiàn)鏈隊(duì)列,根據(jù)隊(duì)的先進(jìn)先出原
則,為了操作上的方便,分別需要一個(gè)頭指針和尾指針。
鏈隊(duì)列的形式描述如下:
typedef struct QNode { // 結(jié)點(diǎn)類型
QElemType data;
struct QNode *next;
} QNode, *QueuePtr;
typedef struct { //鏈隊(duì)列類型
QueuePtr front; //隊(duì)頭指針
QueuePtr rear; //隊(duì)尾指針
} LinkQueue;
定義一個(gè)指向鏈隊(duì)列的指針:LinkQueue Q;
下面是鏈隊(duì)列的基本運(yùn)算的實(shí)現(xiàn)。
(1)入隊(duì)
int EnQueue (LinkQueue &Q, QElemType e) {
QNode *p;
p = (QNode *)malloc(sizeof(QNode));
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return OK;
}
(2)出隊(duì)
int DeQueue (LinkQueue &Q, QElemType &e) {
if (Q.front == Q.rear) return ERROR; //隊(duì)空,出隊(duì)失敗
p = Q.front->next;
e = p->data; //隊(duì)頭元素放 e 中
Q.front->next = p->next;
if(Q.rear==p) Q.rear= Q.front; //只有一個(gè)元素時(shí),此時(shí)還要修改隊(duì)尾指針
free (p);
return OK;
}
3.除了棧和隊(duì)列之外,還有一種限定性數(shù)據(jù)結(jié)構(gòu)是雙端隊(duì)列。
(1)雙端隊(duì)列:可以在雙端進(jìn)行插入和刪除操作的線性表。
(2)輸入受限的雙端隊(duì)列:線性表的兩端都可以輸出數(shù)據(jù)元素,但是只能在一端輸入數(shù)
據(jù)元素。
(3)輸出受限的雙端隊(duì)列:線性表的兩端都可以輸入數(shù)據(jù)元素,但是只能在一端輸出數(shù)
據(jù)元素。
結(jié)束語(yǔ)
總結(jié)
以上是生活随笔為你收集整理的c语言中有队列头文件吗,C语言队列学习竟是如此简单!你,懂了嘛?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小波包分解、重构 matlab代码
- 下一篇: eclipse优化设置