用c语言写出一份代码:利用链表建立一个数组,用户输入N,再输入N个数,计算其中的最小值位置(从1开始编号),分以下四部分 1、 设计结构体和主函数的编写; 2、 建立链表(包括读取数据); 函数原型:struct node * Create(); 3、 负责输出这N个数; 函数原型:void Print(struct node * head); 4、 找出最小值的位置; 函数原型:int Min(struct node * head);
时间: 2024-03-10 18:51:13 浏览: 52
C语言程序设计-给定n个数据, 求最小值出现的位置(如果最小值出现多次,求出第一次出现的位置即可);.c
5星 · 资源好评率100%
好的,下面是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct node {
int value;
struct node *next;
};
// 创建链表
struct node *Create() {
struct node *head, *p, *tail;
int n, value;
// 初始化头节点
head = (struct node *) malloc(sizeof(struct node));
head->next = NULL;
tail = head;
// 读入N个数,依次插入链表尾部
printf("请输入N:\n");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
printf("请输入第%d个数:\n", i);
scanf("%d", &value);
p = (struct node *) malloc(sizeof(struct node));
p->value = value;
p->next = NULL;
tail->next = p;
tail = p;
}
return head;
}
// 输出链表
void Print(struct node *head) {
struct node *p = head->next;
while (p != NULL) {
printf("%d ", p->value);
p = p->next;
}
printf("\n");
}
// 查找最小值的位置
int Min(struct node *head) {
int min_pos = 1, min_value = head->next->value;
struct node *p = head->next->next;
int i = 2;
while (p != NULL) {
if (p->value < min_value) {
min_value = p->value;
min_pos = i;
}
p = p->next;
i++;
}
return min_pos;
}
int main() {
struct node *head = Create();
printf("输入的链表为:");
Print(head);
int min_pos = Min(head);
printf("最小值的位置为:%d\n", min_pos);
return 0;
}
```
在这份代码中,我们首先定义了一个链表节点结构体 `struct node`,包含一个 `value` 成员表示节点的值,以及一个 `next` 成员表示下一个节点的指针。然后,我们定义了三个函数 `Create`、`Print` 和 `Min`,分别用于创建链表、输出链表和查找最小值的位置。
在 `Create` 函数中,我们首先初始化头节点,然后读入用户输入的 `N`,接着使用 `for` 循环读入 `N` 个数,创建一个新的节点,并将其插入链表尾部。
在 `Print` 函数中,我们从链表的第一个节点开始遍历,依次输出每个节点的值。
在 `Min` 函数中,我们首先初始化最小值的位置为第一个节点,最小值为该节点的值。然后,我们从链表的第二个节点开始遍历,依次比较每个节点的值,如果发现比当前最小值更小的节点,则更新最小值的位置和最小值。最后返回最小值的位置即可。
最后,在 `main` 函数中,我们调用 `Create` 函数创建链表,然后调用 `Print` 函数输出链表,最后调用 `Min` 函数查找最小值的位置并输出。
阅读全文