《数据结构学习与实验指导》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
原创粉丝点击