C如何對數組循環移位,c語言 list 使用數組來實現_C|用數組或鏈表來實現隊列這種抽象數據類型

 2023-12-25 阅读 24 评论 0

摘要:抽象數據類型允許用戶在不了解數據類型在計算機中的表示方式的情況下操作數據類型。換句話說,就用戶而言,他需要知道的只是可以對數據類型執行的操作。實現數據類型的人可以自由地更改其實現,而不會影響用戶。隊列是一個線性列表,其中元素在一端添

抽象數據類型允許用戶在不了解數據類型在計算機中的表示方式的情況下操作數據類型。換句話說,就用戶而言,他需要知道的只是可以對數據類型執行的操作。實現數據類型的人可以自由地更改其實現,而不會影響用戶。

隊列是一個線性列表,其中元素在一端添加,從另一端刪除。熟悉的例子有在銀行、超市、音樂會或體育賽事上排隊。人們應該在后面排隊從前面出去。我們希望一個隊列數據結構對于模擬這些實際隊列是有用的。在計算機內部也可以找到隊列。可能有幾個作業等待執行,它們被保留在隊列中?

C如何對數組循環移位,隊列就是一種抽象數據類型。

隊列的應用場景(保存暫時不用的數據或存儲地址):I CPU分時系統;II 模擬打印機緩沖區;III 登錄和退出人數記錄;

隊列可以用鏈表實現,也可以用數組實現:

1 用結構體來定義隊列

typedef struct {int head, tail;int QA[MaxQ];} QType, *Queue;

C語言數組定義過大?2 隊列初始化

Queue initQueue() {Queue qp = (Queue) malloc(sizeof(QType));qp -> head = qp -> tail = 0;return qp;}

3 用初始來定義一個隊列變量

Queue Q = initQueue();

b84a2bc6030028e6a283af3789ed6e97.png

4 判斷棧是否為空

int empty(Queue Q) {return (Q -> head == Q -> tail);}

5 入隊(隊尾)操作

void enqueue(Queue Q, int n) {if (Q -> tail == MaxQ - 1) Q -> tail = 0;else ++(Q -> tail);if (Q -> tail == Q -> head) {printf("Queue is full");exit(1);}Q -> QA[Q -> tail] = n;} //end enqueue

如做以下操作:

enqueue(Q,35);enqueue(Q,15);enqueue(Q,12);
9ae66b2d7135bcad9cd2a0a97b268b59.png

6 出隊(隊頭)操作

int dequeue(Queue Q) {if (empty(Q)) {printf("Attempt to remove from an empty queue");exit(1);}if (Q -> head == MaxQ - 1) Q -> head = 0;else ++(Q -> head);return Q -> QA[Q -> head];} //end dequeue

如做如下操作:

dequeue(Q);enqueue(Q,23);
8f702fb26a26ce1045cf274322cee797.png

完整代碼:

#include #include #define MaxQ 10typedef struct {int head, tail;int QA[MaxQ];} QType, *Queue;Queue initQueue() {Queue qp = (Queue) malloc(sizeof(QType));qp -> head = qp -> tail = 0;return qp;}int empty(Queue Q) {return (Q -> head == Q -> tail);}void enqueue(Queue Q, int n) {if (Q -> tail == MaxQ - 1) Q -> tail = 0;else ++(Q -> tail);if (Q -> tail == Q -> head) {printf("Queue is full");exit(1);}Q -> QA[Q -> tail] = n;}int dequeue(Queue Q) {if (empty(Q)) {printf("Attempt to remove from an empty queue");exit(1);}if (Q -> head == MaxQ - 1) Q -> head = 0;else ++(Q -> head);return Q -> QA[Q -> head];}int main() {int n;Queue Q = initQueue();enqueue(Q,35);enqueue(Q,15);enqueue(Q,12);dequeue(Q);enqueue(Q,23);printf("queue: ");while (!empty(Q))printf("%d 

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/194640.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息