c语言以单链表为例,设计一个主程序完成如下功能: 1)初始化单链表L 2)对L依次插入元素5,34,2,16,22,100 3)依次输出L中的元素 4)求出L中值最大和值最小的元素 5)删除L中第2个结点
时间: 2024-09-27 14:15:07 浏览: 69
在C语言中,我们可以使用结构体来表示单链表节点,并分别实现所需的功能。这里是一个简单的示例程序:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化链表
Node* initList() {
Node* head = (Node*)malloc(sizeof(Node));
if (!head) {
printf("Memory allocation failed.\n");
return NULL;
}
head->data = 0; // 或者你可以选择其他初始值,这里用0
head->next = NULL;
return head;
}
// 插入元素
void insertNode(Node** head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
// 输出链表元素
void printList(Node* head) {
Node* current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
// 比较并返回最大值和最小值
void findMinMax(Node* head) {
Node* minNode = head;
Node* maxNode = head;
if (minNode == NULL || maxNode == NULL) {
printf("Empty list.\n");
return;
}
while (minNode->next != NULL && maxNode->next != NULL) {
if (minNode->data < maxNode->data) {
minNode = minNode->next;
} else {
maxNode = maxNode->next;
}
}
printf("Minimum value: %d\n", minNode->data);
printf("Maximum value: %d\n", maxNode->data);
}
// 删除指定位置的节点
void deleteNode(Node** head, int index) {
if (*head == NULL) {
printf("List is empty.\n");
return;
}
Node* temp = *head;
Node* prev = NULL;
if (index == 0) { // 如果要删除头节点
*head = temp->next;
free(temp);
return;
}
for (int i = 1; temp != NULL && i < index; i++) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) {
printf("Invalid index.\n");
return;
}
prev->next = temp->next;
free(temp);
}
int main() {
Node* L = initList();
// 插入元素
insertNode(&L, 5);
insertNode(&L, 34);
insertNode(&L, 2);
insertNode(&L, 16);
insertNode(&L, 22);
insertNode(&L, 100);
// 输出链表元素
printList(L);
// 找出最大值和最小值
findMinMax(L);
// 删除第2个节点
deleteNode(&L, 1); // 注意索引从0开始计数
// 再次输出链表元素
printList(L);
return 0;
}
```
阅读全文