抽象數據類型允許用戶在不了解數據類型在計算機中的表示方式的情況下操作數據類型。換句話說,就用戶而言,他需要知道的只是可以對數據類型執行的操作。實現數據類型的人可以自由地更改其實現,而不會影響用戶。
隊列是一個線性列表,其中元素在一端添加,從另一端刪除。熟悉的例子有在銀行、超市、音樂會或體育賽事上排隊。人們應該在后面排隊從前面出去。我們希望一個隊列數據結構對于模擬這些實際隊列是有用的。在計算機內部也可以找到隊列。可能有幾個作業等待執行,它們被保留在隊列中?
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();
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);
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);
完整代碼:
#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
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态