生活随笔
收集整理的這篇文章主要介紹了
队列元素排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
初學者,記錄課后練習:
題目:
問題描述
給定一個隊列,請用一系列合法的隊列操作函數,比如判斷隊列是否為空,入隊操作,出隊操作,將隊列中的元素從小到大排序。
輸入說明
輸入首先給出1個正整數N(N<1000),表示隊列中元素的個數。隨后按入隊的順序給出N個整數。
輸出說明
在一行中輸出排序后出對的序列。數字間以空格分隔,但末尾不得有多余空格。
輸入樣例
10 3 6 4 8 7 2 9 0 1 5
輸出樣例
0 1 2 3 4 5 6 7 8 9
提示
可以使用一個輔助的隊列,采用循環篩選法(即第一輪將最小的選出來,第二輪將次小的選出來,以此類推
#include<stdio.h>
#define INF 99999999
#define MAXSIZE 999typedef struct {int items
[MAXSIZE
];int front
;int rear
;
}Queue
;
void initQueue(Queue
* q
)
{q
->front
= q
->rear
= 0;
}int isEmpty(Queue
* q
)
{if (q
->front
== q
->rear
)return 1;elsereturn 0;
}void AddQ(Queue
* q
, int item
)
{if ((q
->rear
+ 1) % MAXSIZE
== q
->front
){printf("隊列滿");return;}q
->rear
= (q
->rear
+ 1) % MAXSIZE
;q
->items
[q
->rear
] = item
;
}int DeleteQ(Queue
* q
)
{if (q
->rear
== q
->front
){printf("隊列空");return NULL;}q
->front
= (q
->front
+ 1) % MAXSIZE
;return q
->items
[q
->front
];
}int main() {Queue q
;Queue tempQ
;initQueue(&q
);initQueue(&tempQ
);int N
;scanf_s("%d", &N
);int m
;for (int i
= 0; i
< N
; i
++) {scanf_s("%d", &m
);AddQ(&q
, m
);}int min
;int i
,j
;for (i
= 0; i
< N
; i
++){min
= INF
;for (j
= i
; j
< N
; j
++){m
= DeleteQ(&q
);if (m
< min
){if (min
!= INF
) AddQ(&q
, min
);min
= m
;}else{AddQ(&q
, m
);}}AddQ(&tempQ
, min
);}printf("%d", DeleteQ(&tempQ
));while (!isEmpty(&tempQ
)){printf(" %d", DeleteQ(&tempQ
));}printf("\n");return 0;
}
總結
以上是生活随笔為你收集整理的队列元素排序的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。