第七周实践项目4 队列数组
生活随笔
收集整理的這篇文章主要介紹了
第七周实践项目4 队列数组
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
創建10個隊列,分別編號為0-9(處理為隊列數組,編號即下標)。輸入若干個正整數,以數字0作為結束。設輸入的值為x,其個位數字的大小為i,則將x插入到編號為i的隊列中。最后輸出所有的非空隊列。
要求將隊列處理成鏈式隊列,使用鏈式隊列算法庫中定義的數據類型及算法,程序中只包括一個函數(main函數),入隊和出隊等操作直接在main函數中調用即可。
設程序運行時輸入:70 59 90 72 67 88 80 64 29 97 18 83 40 13 0
輸出結果如下圖:
/* *Copyright (c) 2017,煙臺大學計算機與控制工程學院 *All rights reserved. *文件名稱:項目3- 創建10個隊列,分別編號為0-9(處理為隊列數組,編號即下標)。輸入若干個正整數,以數字0作為結束。 設輸入的值為x,其個位數字的大小為i,則將x插入到編號為i的隊列中。最后輸出所有的非空隊列。 *作 者:邵雪源 *完成日期:2017年12月13日 *版 本 號:v1.0 */ #include <stdio.h> #include <malloc.h> #define MaxSize 5 #define N 10 typedef int ElemType; typedef struct qnode {ElemType data;struct qnode *next; } QNode; //鏈隊數據結點類型定義 typedef struct {QNode *front;QNode *rear; } LiQueue; //鏈隊類型定義 void InitQueue(LiQueue *&q) //初始化鏈隊 {q=(LiQueue *)malloc(sizeof(LiQueue));q->front=q->rear=NULL; } void enQueue(LiQueue *&q,ElemType e) //入隊 {QNode *p;p=(QNode *)malloc(sizeof(QNode));p->data=e;p->next=NULL;if (q->rear==NULL) //若鏈隊為空,則新節點是隊首節點又是隊尾節點q->front=q->rear=p;else{q->rear->next=p; //將*p節點鏈到隊尾,并將rear指向它q->rear=p;} } bool QueueEmpty(LiQueue *q) //判斷鏈隊是否為空 {return(q->rear==NULL); } int QueueLength(LiQueue *q) //返回隊列中數據元素個數 {int n=0;QNode *p=q->front;while (p!=NULL){n++;p=p->next;}return(n); } bool deQueue(LiQueue *&q,ElemType &e) //出隊 {QNode *t;if (q->rear==NULL) //隊列為空return false;t=q->front; //t指向第一個數據節點if (q->front==q->rear) //隊列中只有一個節點時q->front=q->rear=NULL;else //隊列中有多個節點時q->front=q->front->next;e=t->data;free(t);return true; } void DestroyQueue(LiQueue *&q) //銷毀鏈隊 {QNode *p=q->front,*r; //p指向隊頭數據節點if (p!=NULL) //釋放數據節點占用空間{r=p->next;while (r!=NULL){free(p);p=r;r=p->next;}}free(p);free(q); //釋放鏈隊節點占用空間 } int main() {int i, a;LiQueue *qu[N]; //定義隊列指針數組for (i=0; i<N; i++)InitQueue(qu[i]); //初始化隊列//為隊列中加入值printf("輸入若干正整數,以0結束: ");scanf("%d", &a);while(a){enQueue(qu[a%10], a);scanf("%d", &a);}//輸出各個隊列printf("按個位數整理到各個隊列中后,各隊列出隊的結果是: \n");for (i=0; i<N; i++){printf("qu[%d]: ", i);while(!QueueEmpty(qu[i])){deQueue(qu[i], a);printf("%d ", a);}printf("\n");}//銷毀各個隊列for (i=0; i<N; i++)DestroyQueue(qu[i]);return 0;}
總結
以上是生活随笔為你收集整理的第七周实践项目4 队列数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第七周实践项目3 负数把正数赶出队列
- 下一篇: 第七周实践项目5 排队看病模拟(队列)