给定一个队列,利用队列的合法操作(isEmpty、AddQ、DeleteQ)实现队列中元素的从小到大排序。其中:输入第一行表示队列元素个数,第二行为队列中的元素。 注意:不允许直接访问队列中的元素。 输入样例: 10 9 4 6 1 8 3 7 0 2 5 输出样例: 0 1 2 3 4 5 6 7 8 9利用c语言编写程序,不使用指针
时间: 2024-01-07 13:03:48 浏览: 63
编写程序实现以下功能:从键盘输入十个整数,用冒泡法排序后按从小到大输出
好的,下面是利用队列进行排序的 C 语言程序,不使用指针:
```c
#include <stdio.h>
#define MaxSize 100
// 队列的结构体
typedef struct {
int data[MaxSize]; // 存放队列元素
int front, rear; // 队头和队尾指针
} Queue;
// 初始化队列
void InitQueue(Queue *q) {
q->front = q->rear = 0;
}
// 判断队列是否为空
int isEmpty(Queue *q) {
return q->front == q->rear;
}
// 入队
int AddQ(Queue *q, int x) {
if ((q->rear + 1) % MaxSize == q->front) { // 队列已满,无法插入
return 0;
}
q->data[q->rear] = x; // 将元素 x 插入队尾
q->rear = (q->rear + 1) % MaxSize; // 队尾指针加 1
return 1;
}
// 出队
int DeleteQ(Queue *q, int *x) {
if (isEmpty(q)) { // 队列为空,无法删除
return 0;
}
*x = q->data[q->front]; // 将队头元素赋值给 x
q->front = (q->front + 1) % MaxSize; // 队头指针加 1
return 1;
}
// 队列排序
void QueueSort(Queue *q) {
int i, x;
Queue tmp; // 定义一个临时队列
InitQueue(&tmp); // 初始化临时队列
while (!isEmpty(q)) { // 循环取出队列中的元素
DeleteQ(q, &x); // 取出队头元素
while (!isEmpty(&tmp) && tmp.data[tmp.rear - 1] > x) { // 将比 x 大的元素插入到 q 中
DeleteQ(&tmp, &i); // 将临时队列的队头元素取出
AddQ(q, i); // 将元素插入到 q 的队尾
}
AddQ(&tmp, x); // 将 x 插入到临时队列的队尾
}
while (!isEmpty(&tmp)) { // 将临时队列中的元素依次插入到 q 中
DeleteQ(&tmp, &x);
AddQ(q, x);
}
}
int main() {
Queue q;
int n, i, x;
scanf("%d", &n);
InitQueue(&q); // 初始化队列
for (i = 0; i < n; i++) {
scanf("%d", &x);
AddQ(&q, x); // 将元素插入到队列的队尾
}
QueueSort(&q); // 对队列中的元素进行排序
while (!isEmpty(&q)) { // 输出排序后的队列中的元素
DeleteQ(&q, &x);
printf("%d ", x);
}
return 0;
}
```
阅读全文