日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言中有队列头文件吗,C语言队列学习竟是如此简单!你,懂了嘛?

發布時間:2023/12/31 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言中有队列头文件吗,C语言队列学习竟是如此简单!你,懂了嘛? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、何為隊列?

隊列 (Queue) :是一種先進先出 (First In First Out ,簡稱 FIFO) 的線性表,也是運算受限的線性表。只允許在表的一端進行插入,而在另一端進行刪除。

隊首 (front) :允許進行刪除的一端稱為隊首。

隊尾 (rear) :允許進行插入的一端稱為隊尾。

隊列中沒有元素時稱為空隊列。在空隊列中依次加入元素 a 1 , a 2 , …, a n 之后, a 1 是隊首元素, a n 是隊尾元素。顯然退出隊列的次序也只能是 a 1 , a 2 , …, a n ,即隊列的修改是依先進先出的原則進行的,如圖 3-5 所示。

二、基本操作創建新隊列

判空

進隊

出隊

清空隊

獲得隊頭元素

遍歷隊

銷毀隊

隊長

三、隊列的存儲實現及運算實現

與線性表、棧類似,隊列也有順序存儲和鏈式存儲兩種存儲方法。

1.順序隊列

循環隊列的類型定義如下:

#define MAXQSIZE 100 //最大隊列長度

typedef struct {

QElemType *base; //動態分配存儲空間

int front; //頭指針,若隊列不空,指向隊列頭元素

int rear; //尾指針,若隊列不空,指向隊列尾元素的下一個位置

} SqQueue;

下面是循環隊列上基本操作的實現。

(1)入隊:

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)出隊:

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)求循環隊列元素個數:

int QueueLength(SqQueue Q){

return (Q.rear-Q.front+MAXQSIZE) %MAXQSIZE;

}

2.鏈隊列

鏈式存儲的隊稱為鏈隊列。和鏈棧類似,用單鏈表來實現鏈隊列,根據隊的先進先出原

則,為了操作上的方便,分別需要一個頭指針和尾指針。

鏈隊列的形式描述如下:

typedef struct QNode { // 結點類型

QElemType data;

struct QNode *next;

} QNode, *QueuePtr;

typedef struct { //鏈隊列類型

QueuePtr front; //隊頭指針

QueuePtr rear; //隊尾指針

} LinkQueue;

定義一個指向鏈隊列的指針:LinkQueue Q;

下面是鏈隊列的基本運算的實現。

(1)入隊

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)出隊

int DeQueue (LinkQueue &Q, QElemType &e) {

if (Q.front == Q.rear) return ERROR; //隊空,出隊失敗

p = Q.front->next;

e = p->data; //隊頭元素放 e 中

Q.front->next = p->next;

if(Q.rear==p) Q.rear= Q.front; //只有一個元素時,此時還要修改隊尾指針

free (p);

return OK;

}

3.除了棧和隊列之外,還有一種限定性數據結構是雙端隊列。

(1)雙端隊列:可以在雙端進行插入和刪除操作的線性表。

(2)輸入受限的雙端隊列:線性表的兩端都可以輸出數據元素,但是只能在一端輸入數

據元素。

(3)輸出受限的雙端隊列:線性表的兩端都可以輸入數據元素,但是只能在一端輸出數

據元素。

結束語

總結

以上是生活随笔為你收集整理的c语言中有队列头文件吗,C语言队列学习竟是如此简单!你,懂了嘛?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。