题目:编写一个程序,输入 n(由用户输入)个 10 以内的数,每输入 i(0≤i≤9),就把它插入到第 i 号队列中。最后把 10 个队中非空队列,按队列号从小到大的顺序串接成一条链,并输出该链的所有元素。
输入要求:
第1行输入n的值
第2~n+1行输入相应的整数,n为小于10的整数
输出要求:
从小到大的排序
====================
用例如下:
输入:
5
2
1
7
4
9
输出:
1,2,4,7,9,
解题思路:因为题设要求,输入整数为i,就要排队到第i号,所以要创建链式队列,方便按输入的号数插入队列;核心是要对队列进行从小到大的排列,这里可以直接写一个函数rankQueue对队列进行排序。
源代码:
#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include<stdio.h>
#include<stdlib.h>
#define Max 10
//定义队结点
typedef struct QueueNode {
int data;
struct QueueNode* next;
}QueueNode;
//定义队
typedef struct {
QueueNode *front;
QueueNode *rear;
int size;
}Queue;
//初始化
void InitQueue(Queue &Q) {
QueueNode* p= (QueueNode*)malloc(sizeof(QueueNode));
Q.front = Q.rear = p;
Q.front->next = NULL;
Q.size = 0;
}
//入队
void Push(Queue& Q, int e) {
QueueNode* p = (QueueNode*)malloc(sizeof(QueueNode));
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
}
//排序
void rankQueue(Queue& Q) {
QueueNode* p = Q.front->next;
QueueNode* q;
int temp;
while (p->next != NULL) {
q = p->next;
while (q) {
if (q->data < p->data) {
temp = p->data;
p->data = q->data;
q->data = temp;
}
q = q->next;
}
p = p->next;
}
printf("排序完成!\n");
}
//出队
void Pop(Queue& Q, int& e) {
if (Q.front == Q.rear)
return;
QueueNode* p = (QueueNode*)malloc(sizeof(QueueNode));
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p)
Q.rear = Q.front;
free(p);
}
int main() {
Queue Q;
InitQueue(Q);
int n,e;
printf("请输入n的值:\n");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &e);
Push(Q, e);
}
rankQueue(Q);
for (int i = 0; i < n; i++) {
Pop(Q, e);
printf("%d,", e);
}
return 0;
}
调试:
各位同学加油啊!送给每个正在努力的小伙伴一句话:“少年一贯快马杨帆,道阻且长不转弯,要盛大,要绚烂要哗然。”