C语言编写代码,完成: 1、创建一个带头结点的单链表,随机输入若干整数。 2、查找 结点数值等于dat的结点最大位序。(dat 需要外部输入) 3、插入 元素 到 指定 位置 ,其中元素值和位置都外部输入。 4、删除链表中的最大值。
时间: 2024-10-10 19:13:48 浏览: 31
链表-使用C语言实现带头结点的单链表.zip
在C语言中,我们可以使用结构体定义链表节点,同时使用数组来辅助存储临时数据。这里是一个简化的实现步骤:
1. 创建链表头结点:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
Node* createList() {
Node* head = (Node*)malloc(sizeof(Node));
head->data = -1; // 初始化为空
head->next = NULL;
return head;
}
// 添加函数,用于输入整数并添加到链表尾部
void addElement(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
```
2. 查找指定值的最大位序:
```c
int findMaxPosition(Node* head, int dat) {
int maxPos = 0;
while (head != NULL) {
if (head->data == dat) {
maxPos++;
}
head = head->next;
}
return maxPos;
}
```
3. 插入元素到指定位置:
```c
void insertElement(Node** head, int element, int position) {
if (position <= 0) {
printf("Invalid position.\n");
return;
}
Node* current = *head;
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = element;
for (int i = 1; i < position && current != NULL; ++i) {
current = current->next;
}
if (current == NULL) {
newNode->next = *head;
*head = newNode;
} else {
newNode->next = current->next;
current->next = newNode;
}
}
```
4. 删除链表中的最大值:
```c
void deleteMaxValue(Node** head) {
if (*head == NULL || (*head)->next == NULL) {
free(*head);
*head = NULL;
return;
}
Node* maxNode = *head;
Node* current = *head->next;
while (current != NULL && current->data > maxNode->data) {
maxNode = current;
current = current->next;
}
if (maxNode == *head) { // 如果最大值就是第一个节点
*head = current;
} else {
maxNode->next = current->next;
}
free(maxNode); // 释放最大值节点内存
}
```
请注意,这只是一个基本的实现,实际应用中还需要考虑错误处理和其他边界情况。运行以上代码前,请确保已经从用户那里获取了`dat`、`element`和`position`作为输入。
阅读全文