用C语言编写代码,完成:1、创建一个带头结点的单链表,随机输入若干整数。2、查找 结点数值等于dat的结点最大位序。(dat 需要外部输入)3、插入 元素 到 指定 位置 ,其中元素值和位置都外部输入。4、删除链表中的最大值。
时间: 2024-10-15 21:26:16 浏览: 37
链表-使用C语言实现带头结点的单链表.zip
在C语言中,我们可以使用结构体表示链表节点,并通过函数实现所需的功能。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建链表并随机插入整数
Node* create_list(int n) {
Node* head = (Node*)malloc(sizeof(Node));
head->data = 0;
head->next = NULL;
srand(time(0)); // 设置随机种子
for (int i = 1; i <= n; i++) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = rand() % 100; // 随机生成0-99之间的整数
newNode->next = head->next;
head->next = newNode;
}
return head;
}
// 查找值等于dat的最大位序结点
void find_max_sequence(int dat, Node* head) {
Node* max_seq = head;
Node* current = head;
while (current != NULL && current->data < dat) {
max_seq = current;
current = current->next;
}
if (current && current->data == dat) {
printf("最大位序结点数据为:%d\n", current->data);
} else {
printf("未找到数据为%d的结点。\n", dat);
}
}
// 插入元素到指定位置
void insert_at_position(int value, int position, Node* head) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
if (position == 1) { // 如果是要插入头结点
newNode->next = head;
head = newNode;
} else {
Node* prev = head;
for (int i = 1; i < position - 1 && prev != NULL; i++) {
prev = prev->next;
}
if (prev == NULL) {
printf("插入位置超出链表长度。\n");
} else {
newNode->next = prev->next;
prev->next = newNode;
}
}
}
// 删除链表中的最大值
void delete_max_value(Node** head) {
if (*head == NULL) {
return;
}
Node* max_node = *head;
Node* current = *head;
while (current->next != NULL && current->data > current->next->data) {
max_node = current;
current = current->next;
}
if (max_node->data != current->data) {
printf("链表中没有最大值。\n");
} else {
max_node->next = current->next;
free(current); // 释放已删除的节点内存
}
}
int main() {
int n, value, position, dat;
printf("请输入链表长度:");
scanf("%d", &n);
Node* list = create_list(n);
printf("请输入要查找的值dat:");
scanf("%d", &dat);
find_max_sequence(dat, list);
printf("请输入插入值和位置:");
scanf("%d %d", &value, &position);
insert_at_position(value, position, list);
printf("请输入要删除的最大值:");
scanf("%d", &dat);
delete_max_value(&list);
return 0;
}
```
这个程序首先创建一个链表,然后让用户输入查询值、插入值、位置以及要删除的最大值,然后分别执行相应的操作。
阅读全文