链队的介绍与实现
文章目錄
- 1 鏈隊定義
- 2 鏈隊基本操作
- 3 代碼實現
1 鏈隊定義
隊列的鏈式存儲結構簡稱為鏈隊列,它是限制僅在表頭刪除和表尾插入的單鏈表。顯然僅有單鏈表的頭指針不便于在表尾做插入操作,為此再增加一個尾指針,指向鏈表上的最后一個結點。
typedef int ElemType; typedef struct queue {ElemType data;struct queue *next; } *Queue; typedef struct linkQueue {Queue front;Queue rear; } *LinkQueue;2 鏈隊基本操作
判斷隊列是否為空
int IsEmpty(LinkQueue Q) {return Q->front == Q->rear; }入隊
第一個元素進入一個空隊后,front和rear都指向這個元素,后繼的元素陸續進隊,隊尾入,rear指針始終指向最后一個進隊的元素。
void EnQueue(LinkQueue Q, ElemType e) {Queue q = (Queue)malloc(sizeof(struct queue));q->data = e;q->next = NULL;Q->rear->next = q;Q->rear = q; }出隊
隊頭出,首先進行出隊判空的檢查
void DeQueue(LinkQueue Q, ElemType *e) {if (IsEmpty(Q)) {return;}Queue p = Q->front->next;*e = p->data;Q->front->next = p->next;if (Q->rear == p) {Q->rear = Q->front;}free(p); }3 代碼實現
#include <stdio.h> #include <stdlib.h> #include <time.h>typedef int ElemType; typedef struct queue {ElemType data;struct queue *next; } *Queue;typedef struct linkQueue {Queue front;Queue rear; } *LinkQueue;LinkQueue InitQueue(void) {LinkQueue Q = (LinkQueue)malloc(sizeof(struct linkQueue));Q->rear = Q->front = (Queue)malloc(sizeof(struct queue));Q->front->next = NULL;return Q; }int IsEmpty(LinkQueue Q) {return Q->front == Q->rear; }void EnQueue(LinkQueue Q, ElemType e) {Queue q = (Queue)malloc(sizeof(struct queue));q->data = e;q->next = NULL;Q->rear->next = q;Q->rear = q; }void DeQueue(LinkQueue Q, ElemType *e) {if (IsEmpty(Q)) {return;}Queue p = Q->front->next;*e = p->data;Q->front->next = p->next;if (Q->rear == p) {Q->rear = Q->front;}free(p); }int main(void) {LinkQueue Q = InitQueue();ElemType e;scanf("%d", &e);EnQueue(Q, e);DeQueue(Q, &e);printf("%d", e); }運行結果:
總結
- 上一篇: 国科大高级人工智能+prml4-CNN
- 下一篇: 基于知识图谱的直升机飞行指挥模型研究