《数据结构学习与实验指导》3-9:队列中的元素排序
来源:互联网 发布:java模拟器安卓版官网 编辑:程序博客网 时间:2024/06/05 06:19
实验内容:给定一个队列,将队列内的元素从小到大排序。不能直接访问队列中的元素。可以使用辅助队列。排序后的结果应存放在原队列中。
输入说明:首先给出1个正整数N(N<=10^5),表示队列中元素的个数。随后输入N个整数。
输出说明:在一行中输出排序后的出队序列。数字间以空格分隔,结尾不能有多余空格。
测试用例:
输入 | 输出
10 9 4 6 1 8 3 7 0 2 5 | 0 1 2 3 4 5 6 7 8 9
#include <stdio.h>#include <stdlib.h>typedef struct { int maxSize; int headIndex; int rearIndex; int *arr;} *PQueue;PQueue initQueue(int size);int isFullQueue(PQueue queue);int isEmptyQueue(PQueue queue);void addQueue(PQueue queue, int num);int deleteQueue(PQueue queue);int main() { int N; scanf("%d", &N); PQueue queue1 = initQueue(N + 1); int i; for (i = 0; i < N; i++) { int num; scanf("%d", &num); addQueue(queue1, num); } PQueue queue2 = initQueue(N + 1); int count1 = N; while (count1 > 0) { int min = deleteQueue(queue1); int count2 = count1 - 1; while (count2 > 0) { int num = deleteQueue(queue1); if (num < min) { addQueue(queue1, min); min = num; } else { addQueue(queue1, num); } count2 --; } addQueue(queue2, min); count1--; } int num = deleteQueue(queue2); addQueue(queue1, num); printf("%d", num); while (! isEmptyQueue(queue2)) { num = deleteQueue(queue2); addQueue(queue1, num); printf(" %d", num); } printf("\n"); return 0;} PQueue initQueue(int size) { PQueue queue = (PQueue) malloc(sizeof(PQueue)); queue->maxSize = size; queue->headIndex = 0; queue->rearIndex = 0; queue->arr = (int *) malloc(sizeof(int) * size); return queue;}int isFullQueue(PQueue queue) { if ((queue->rearIndex + 1) % queue->maxSize == queue->headIndex) { return 1; } return 0;}int isEmptyQueue(PQueue queue) { if (queue->headIndex == queue->rearIndex) { return 1; } return 0;}void addQueue(PQueue queue, int num) { if (! isFullQueue(queue)) { queue->arr[queue->rearIndex] = num; queue->rearIndex = (queue->rearIndex + 1) % queue->maxSize; } }int deleteQueue(PQueue queue) { if (! isEmptyQueue(queue)) { int ret = queue->arr[queue->headIndex]; queue->headIndex = (queue->headIndex + 1) % queue->maxSize; return ret; } return -11111;}
阅读全文
0 0
- 《数据结构学习与实验指导》3-9队列中的元素排序
- 《数据结构学习与实验指导》3-9:队列中的元素排序
- 《数据结构学习与实验指导》3-8:堆栈模拟队列
- 《数据结构学习与实验指导》4-4:Windows消息队列
- 《数据结构学习与实验指导》3-3:银行业务队列简单模拟
- <数据结构学习与实验指导>3-3银行业务队列模拟/3-4一元多项式的乘法与加法运算
- 《数据结构学习与实验指导》2-9:装箱问题模拟
- 《数据结构学习与实验指导》4-9:笛卡尔树
- 《数据结构学习与实验指导》3-7求前缀表达式的值/3-8堆栈模拟队列
- 《数据结构学习与实验指导》3-1:一元多项式求导
- 《数据结构学习与实验指导》3-6:表达式转换
- 《数据结构学习与实验指导》4-3:朋友圈
- 《数据结构学习与实验指导》5-3:电话聊天狂人
- <数据结构学习与实验指导>2-2数组元素循环右移问题
- 《数据结构学习与实验指导》2-2:数组元素循环右移问题
- PAT《数据结构学习与实验指导》实验项目集 3-04
- PAT《数据结构学习与实验指导》实验项目集 3-05
- <数据结构学习与实验指导>2-1:简单计算器
- Android内存管理机制之一:lowmemory killer
- plog库使用总结
- 2017年网易校招算法编程题:优雅的点(PHP版)
- 3371 Connect the Cities(最小生成树)
- Java读写XML代码示例
- 《数据结构学习与实验指导》3-9:队列中的元素排序
- c++中的查找算法
- 208.m1-ViewPager的优化
- can总线延时分析
- c++中的哈希算法实现
- 1162 Eddy's picture(最小生成树)
- Androidbuild.prop详细优化
- 共用体unoin
- 1863 畅通工程(最小生成树树)