日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

队列元素排序

發(fā)布時間:2023/12/20 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 队列元素排序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

初學(xué)者,記錄課后練習(xí):
題目:
問題描述
給定一個隊列,請用一系列合法的隊列操作函數(shù),比如判斷隊列是否為空,入隊操作,出隊操作,將隊列中的元素從小到大排序。
輸入說明
輸入首先給出1個正整數(shù)N(N<1000),表示隊列中元素的個數(shù)。隨后按入隊的順序給出N個整數(shù)。
輸出說明
在一行中輸出排序后出對的序列。數(shù)字間以空格分隔,但末尾不得有多余空格。
輸入樣例
10 3 6 4 8 7 2 9 0 1 5
輸出樣例
0 1 2 3 4 5 6 7 8 9
提示
可以使用一個輔助的隊列,采用循環(huán)篩選法(即第一輪將最小的選出來,第二輪將次小的選出來,以此類推

#include<stdio.h> #define INF 99999999 #define MAXSIZE 999typedef struct {int items[MAXSIZE];int front;int rear; }Queue; /*定義結(jié)構(gòu)體隊列Queue;Queue是一個順序隊列,規(guī)定頭指針front總是指向當(dāng)前隊頭元素的前一個位置, 尾指針rear指向當(dāng)前隊尾元素的位置*/void initQueue(Queue* q) {q->front = q->rear = 0; }//將隊列初始化,函數(shù)沒有返回值int isEmpty(Queue* q) {if (q->front == q->rear)//循環(huán)意義下,判斷隊空的條件return 1;elsereturn 0; }//判斷隊列是否為空,這個函數(shù)將會在輸出隊列元素時使用void AddQ(Queue* q, int item) {if ((q->rear + 1) % MAXSIZE == q->front)//循環(huán)意義下,判斷隊滿的條件{printf("隊列滿");return;//return 后面什么也不跟,用來結(jié)束函數(shù)}//return是提前結(jié)束函數(shù)的唯一辦法q->rear = (q->rear + 1) % MAXSIZE;//循環(huán)意義下隊尾指針+1的操作q->items[q->rear] = item;//將新的元素添加到隊尾 }int DeleteQ(Queue* q) {if (q->rear == q->front)//循環(huán)意義下判斷隊列為空的操作{printf("隊列空");return NULL;}q->front = (q->front + 1) % MAXSIZE;//出隊操作時頭指針+1return q->items[q->front];//返回隊頭的元素 }int main() {Queue q;Queue tempQ;initQueue(&q);initQueue(&tempQ);int N;scanf_s("%d", &N);//輸入隊列的長度Nint m;for (int i = 0; i < N; i++) {scanf_s("%d", &m);AddQ(&q, m);}//輸入隊列中的N個元素int min;int i,j;for (i = 0; i < N; i++){min = INF;for (j = i; j < N; j++)//開始一輪循環(huán),篩選出原隊列中的最小元素,并將其取出放入新隊列的隊尾{m = DeleteQ(&q);//m為原隊列的隊頭元素if (m < min){//取隊頭元素,與最小值比較,如果比最小值大,則將取出來的元素放到原隊列的隊尾if (min != INF) AddQ(&q, min);//如果比最小值小,則用這個元素取代最小值,將原來的最小值入隊min = m;}else{AddQ(&q, m);}}//經(jīng)過一輪循環(huán)下來,得到的最小值為隊列中的最小值AddQ(&tempQ, min);//將這個最小值添加到新隊列的隊尾}//經(jīng)過N輪循環(huán),新隊列的元素按增序排列printf("%d", DeleteQ(&tempQ));while (!isEmpty(&tempQ)){printf(" %d", DeleteQ(&tempQ));}printf("\n");return 0; }

總結(jié)

以上是生活随笔為你收集整理的队列元素排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。