用菜单方式实现:(1)分别用头插法和尾插法方式创建一个单链表;(2)插入一个元素到某位置;(3)根据位置查找元素;(4)根据元素查找位置;(5)输出单链表。 C语言代码
时间: 2024-09-27 22:08:45 浏览: 35
在C语言中,我们可以使用结构体和指针来实现单链表操作。这里是一个简单的例子,展示了如何使用头插法(在头部插入节点)、尾插法(在尾部插入节点),以及插入、查找和输出链表的函数:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
// 头插法创建链表
ListNode* createListHeadInsert(int* arr, int len) {
ListNode* head = (ListNode*)malloc(sizeof(ListNode));
if (!head) {
printf("Memory allocation failed.\n");
return NULL;
}
head->data = arr[0];
head->next = NULL;
for (int i = 1; i < len; i++) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = arr[i];
newNode->next = head->next;
head->next = newNode;
}
return head;
}
// 尾插法创建链表
ListNode* createListTailInsert(int* arr, int len) {
ListNode* head = NULL;
ListNode* tail = NULL;
for (int i = 0; i < len; i++) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = arr[i];
if (head == NULL) {
head = tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
return head;
}
// 插入一个元素到指定位置
void insertNodeAtPosition(ListNode** list, int position, int value) {
if (*list == NULL || position <= 0) {
printf("Invalid insertion position or empty list.\n");
return;
}
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = value;
if (position == 1) { // 插入到头部
newNode->next = *list;
*list = newNode;
} else {
ListNode* current = *list;
for (int i = 1; i < position - 1 && current != NULL; i++) {
current = current->next;
}
if (current != NULL) {
newNode->next = current->next;
current->next = newNode;
} else {
printf("Insertion position out of range.\n");
}
}
}
// 根据位置查找元素
ListNode* findElementByPosition(ListNode* list, int position) {
if (list == NULL || position <= 0) {
printf("Invalid position or empty list.\n");
return NULL;
}
for (int i = 1; i <= position && list != NULL; i++) {
if (i == position) {
return list;
}
list = list->next;
}
return NULL;
}
// 输出单链表
void printList(ListNode* list) {
while (list != NULL) {
printf("%d -> ", list->data);
list = list->next;
}
printf("NULL\n");
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int len = sizeof(arr) / sizeof(arr[0]);
ListNode* head = createListHeadInsert(arr, len); // 使用头插法
printList(head);
head = createListTailInsert(arr, len); // 使用尾插法
printList(head);
insertNodeAtPosition(&head, 3, 6); // 在第3位插入元素
printList(head);
ListNode* foundNode = findElementByPosition(head, 4); // 查找值为4的节点
if (foundNode != NULL) {
printf("Found element at position 4 with value %d\n", foundNode->data);
} else {
printf("Element not found.\n");
}
return 0;
}
```
阅读全文