数据结构(严蔚敏)之六——链式队列c语言实现
生活随笔
收集整理的這篇文章主要介紹了
数据结构(严蔚敏)之六——链式队列c语言实现
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
實(shí)驗(yàn):
編寫一個(gè)程序?qū)崿F(xiàn)鏈隊(duì)列的各種基本運(yùn)算,并在此基礎(chǔ)上設(shè)計(jì)一個(gè)主程序,完成如下功能:
(1)初始化并建立鏈隊(duì)列
(2)入鏈隊(duì)列
(3)出鏈隊(duì)列
(4)遍歷鏈隊(duì)列
?
分析:
隊(duì)列的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)簡(jiǎn)稱為鏈隊(duì)列。它是限制僅在表頭刪除和表尾插入的單鏈表。
注意:
(1)和鏈棧類似,無須考慮判隊(duì)滿的運(yùn)算及上溢。
(2)在出隊(duì)算法中,一般只需修改隊(duì)頭指針。但當(dāng)原隊(duì)中只有一個(gè)結(jié)點(diǎn)時(shí),該結(jié)點(diǎn)既是隊(duì)頭也是隊(duì)尾,故刪去此結(jié)點(diǎn)時(shí)亦需修改尾指針,且刪去此結(jié)點(diǎn)后隊(duì)列變空。
(3)和單鏈表類似,為了簡(jiǎn)化邊界條件的處理,在隊(duì)頭結(jié)點(diǎn)前可附加一個(gè)頭結(jié)點(diǎn)。
隊(duì)列的鏈?zhǔn)綄?shí)現(xiàn):
#include <stdio.h> #include <malloc.h>typedef int ElemType; typedef int Status; #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef struct Node {ElemType data;struct Node *next; }Node;typedef struct {Node *front;Node *rear; }LinkQueue;Status InitQueue(LinkQueue *q) {q->front = NULL;q->rear = NULL;return OK; }//InitQueueStatus DestroyQueue(LinkQueue *q) {Node *p = q->front;while(p){q->front = p->next;free(p);p = q->front;}puts("隊(duì)列已銷毀!");return OK; }bool isEmpty(LinkQueue *q) {if(q->front ==NULL && q->rear == NULL)return TRUE;return FALSE; }//isEmptyStatus Push(LinkQueue *q, ElemType e) {Node *p = (Node*)malloc(sizeof(Node));if(!p){puts("存儲(chǔ)空間分配失敗!");return ERROR;}p->data = e;p->next = NULL;//防止出現(xiàn)野指針if(isEmpty(q))//如果是空隊(duì)列,則front指向p(第一個(gè)元素)q->front = p;elseq->rear->next = p;q->rear = p;//q->rear指向隊(duì)尾return OK; }//PushStatus Pop(LinkQueue *q, ElemType *e) {Node *p = q->front;if(isEmpty(q)){puts("隊(duì)列為空!");return ERROR;}*e = p->data;q->front = p->next;free(p);if(q->front == NULL)//如果出隊(duì)列后隊(duì)列空了,則q->rear應(yīng)指向NULL,q->rear = NULL;return OK; }//PopStatus createQueue(LinkQueue *q) {InitQueue(q);puts("請(qǐng)輸入要輸入的隊(duì)列元素個(gè)數(shù):");int n;scanf("%d", &n);while(n--){int m;scanf("%d", &m);Push(q, m);}return OK; }//createQueueStatus PrintQueue(LinkQueue *q) {Node *p = q->front;puts("隊(duì)列中有以下元素:");while(p){printf("%d ", p->data);p = p->next;}puts("");return OK; }測(cè)試代碼:
int main() {LinkQueue q;int e;createQueue(&q);PrintQueue(&q);Pop(&q, &e);puts("出隊(duì)列的元素是:");printf("%d\n", e);PrintQueue(&q);Push(&q, 8);puts("8進(jìn)隊(duì)列后:");PrintQueue(&q);DestroyQueue(&q);return 0; }
運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的数据结构(严蔚敏)之六——链式队列c语言实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Node.js安装及环境配置之Windo
- 下一篇: 数据结构(严蔚敏)之三——顺序栈之c语言