用C语言编写代码,完成: 1、创建一个带头结点的单链表,随机输入若干整数。 2、查找 结点数值等于dat的结点最大位序。(dat 需要外部输入) 3、插入 元素 到 指定 位置 ,其中元素值和位置都外部输入。 4、删除链表中的最大值。
时间: 2024-10-10 18:06:15 浏览: 41
链表-使用C语言实现带头结点的单链表.zip
在C语言中,我们可以使用结构体表示链表节点,并结合随机数生成、输入操作以及链表的基本操作来完成上述任务。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化头节点
Node* createList() {
Node* head = (Node*)malloc(sizeof(Node));
if (!head) {
printf("Memory allocation failed.\n");
return NULL;
}
head->data = 0;
head->next = NULL;
return head;
}
// 向链表添加随机数
void insertRandom(int n, Node** head) {
srand(time(NULL));
for (int i = 1; i <= n; ++i) {
int value = rand() % 100; // 生成0-99之间的随机数
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
}
// 查找指定数据的最大位序结点
Node* findMaxOrderNode(int dat, Node* head) {
while (head != NULL && head->data < dat)
head = head->next;
return head;
}
// 插入元素到指定位置
void insertAtPosition(int element, int position, Node** head) {
if (*head == NULL || position <= 0) {
printf("Invalid position.\n");
return;
}
Node* current = *head;
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = element;
newNode->next = NULL;
for (int i = 1; i < position; ++i) {
if (current->next == NULL)
break;
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
// 删除链表中的最大值
void deleteMaxValue(Node** head) {
if (*head == NULL) {
printf("List is empty.\n");
return;
}
Node* maxNode = *head;
Node* current = *head->next;
while (current != NULL) {
if (current->data > maxNode->data) {
maxNode = current;
}
current = current->next;
}
free(maxNode);
*head = maxNode->next;
}
// 打印链表
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
Node* head = createList();
if (head != NULL) {
int n, dat, pos, element;
printf("Enter number of elements: ");
scanf("%d", &n);
insertRandom(n, &head);
printf("Initial list:\n");
printList(head);
printf("Enter data to find its maximum order node: ");
scanf("%d", &dat);
Node* maxNode = findMaxOrderNode(dat, head);
if (maxNode != NULL) {
printf("Maximum order node with data %d: %d\n", dat, maxNode->data);
} else {
printf("Data not found in the list.\n");
}
printf("Enter element to insert and position: ");
scanf("%d %d", &element, &pos);
insertAtPosition(element, pos, &head);
printf("List after insertion at position %d:\n", pos);
printList(head);
printf("Enter an element to delete: ");
scanf("%d", &element);
deleteMaxValue(&head);
printf("List after deleting maximum value:\n");
printList(head);
}
return 0;
}
```
这个程序首先创建一个空链表并添加随机数,然后演示如何查找指定数据的最大位序结点,插入元素到特定位置,以及删除链表中的最大值。注意这只是一个基础版本的实现,实际应用中可能需要考虑更多的边界条件和错误处理。
阅读全文