C语言编写一个程序,输入n(由用户输入)个10以内的数,每输入i(0≤≤9)就把它插到第i号队列中,最后把10个队中的非空队列按队列号从小到大的顺序串接成一条链,并输出该链中的所有元素。
时间: 2023-09-15 22:05:48 浏览: 172
### 回答1:
以下是 C 语言编写的程序,可以实现上述功能:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 10
#define MAX_VAL 10
typedef struct node {
int val;
struct node *next;
} Node;
Node *queues[MAX_VAL];
void insert(int val, int idx) {
Node *new_node = (Node *) malloc(sizeof(Node));
new_node->val = val;
new_node->next = NULL;
if (queues[idx] == NULL) {
queues[idx] = new_node;
} else {
Node *cur = queues[idx];
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = new_node;
}
}
void print_list(Node *head) {
Node *cur = head;
while (cur != NULL) {
printf("%d ", cur->val);
cur = cur->next;
}
printf("\n");
}
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < MAX_VAL; i++) {
queues[i] = NULL;
}
for (int i = 0; i < n; i++) {
int val;
scanf("%d", &val);
insert(val, val);
}
Node *head = NULL;
Node *tail = NULL;
for (int i = 0; i < MAX_VAL; i++) {
if (queues[i] != NULL) {
if (head == NULL) {
head = queues[i];
tail = head;
} else {
tail->next = queues[i];
tail = tail->next;
}
}
}
print_list(head);
return 0;
}
```
这个程序可以读入用户输入的 n 个数,并将它们插入到对应的队列中。然后,它会遍历所有队列,将非空队列按顺序连接起来,形成一个链表。最后,它会输出这个链表中的所有元素。
### 回答2:
这是一个 C 语言编写的程序,实现了以下功能:用户输入 n 个 10 以内的数,并按照输入的数将其插入相应的队列中。最终将 10 个队列中的非空队列按队列号从小到大的顺序串接成一条链,并输出该链中的所有元素。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义一个队列结构体
struct Queue {
int data;
struct Queue* next;
};
// 将元素插入队列中
void enqueue(struct Queue** queue, int data) {
struct Queue* temp = (struct Queue*)malloc(sizeof(struct Queue));
temp->data = data;
temp->next = NULL;
if (*queue == NULL) {
*queue = temp;
} else {
struct Queue* curr = *queue;
while (curr->next != NULL) {
curr = curr->next;
}
curr->next = temp;
}
}
// 打印队列中的元素
void printQueue(struct Queue* queue) {
while (queue != NULL) {
printf("%d ", queue->data);
queue = queue->next;
}
}
int main() {
struct Queue* queues[10] = {NULL}; // 创建一个长度为 10 的队列数组
int n;
printf("请输入n的值:");
scanf("%d", &n);
printf("请依次输入 %d 个10以内的整数:\n", n);
for (int i = 0; i < n; i++) {
int num;
scanf("%d", &num);
enqueue(&queues[num], num); // 将数插入对应的队列中
}
printf("链中的所有元素:");
for (int i = 0; i < 10; i++) {
if (queues[i] != NULL) {
printQueue(queues[i]); // 打印非空队列
}
}
return 0;
}
```
在该程序中,我们首先定义了一个队列结构体,包含一个整数 data 和指向下一个元素的指针 next。然后,我们创建了一个长度为 10 的队列数组 queues,用于存储 10 个队列。
用户首先输入 n 的值,然后依次输入 n 个 10 以内的整数。我们将这些整数按照输入的值插入对应的队列中,即将数值 i 添加到 queues[i] 对应的队列中。
最后,我们按队列号从小到大的顺序遍历队列数组,打印非空队列中的元素,即为最后输出的链中的所有元素。
### 回答3:
首先,我们需要用数组来表示10个队列,数组的长度为10。然后,我们利用一个循环,根据用户输入的数字n(表示输入的数的个数),来获取n个数。在获取每个数的同时,将其插入到相应的队列中,也就是将其加入到对应队列的末尾。
具体的步骤如下:
1. 定义一个长度为10的整型数组,用于表示10个队列
2. 接收用户输入的n,表示需要输入的数的个数
3. 循环n次,每次获取一个数num
1)判断num的合法性,即num是否在0-9之间
2)将num插入到num所对应的队列的末尾
4. 定义一个变量result,用于存储链中的所有元素。初始化为空字符串。
5. 循环遍历数组,将非空的队列依次连接起来,形成一个链
6. 输出链中的所有元素
下面是一个参考的C语言代码:
```c
#include <stdio.h>
#define QUEUE_SIZE 10
int main() {
int queues[QUEUE_SIZE][QUEUE_SIZE] = {0};
int n, num;
printf("请输入数的个数n:");
scanf("%d", &n);
for(int i=0; i<n; i++) {
printf("请输入一个10以内的数字:");
scanf("%d", &num);
if(num >= 0 && num <= 9) {
int queueIndex = num;
int index = 0;
while(queues[queueIndex][index] != 0) {
index++;
}
queues[queueIndex][index] = num;
}
}
char result[100] = "";
for(int i=0; i<QUEUE_SIZE; i++) {
int index = 0;
while(queues[i][index] != 0) {
char temp[10];
sprintf(temp, "%d ", queues[i][index]);
strcat(result, temp);
index++;
}
}
printf("链中的元素有:%s\n", result);
return 0;
}
```
此程序可以根据用户输入的n个10以内的数,将其插入到对应的队列中,并且按队列号从小到大的顺序输出链中的所有元素。
阅读全文