C语言解决编程单链表的数据结构,从键盘输入一批数据创建单链表、然后指定某个要删除的数据进行插入操作、接着指定某个要删除的数据进行删除操作,并将前面每个操作前后的单链表数据变化进行显示。
时间: 2024-09-19 10:10:33 浏览: 37
在C语言中,我们可以使用结构体和指针来实现单链表的数据结构。首先,我们需要定义一个`Node`结构体表示链表节点,包含一个数据域`data`和一个指向下一个节点的指针`next`。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点函数
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 创建链表函数
Node* createLinkedList() {
Node* head = NULL;
int input;
printf("请输入数据(输入-1结束): ");
while ((input = getchar()) != -1 && input != '\n') {
if (input == ' ') continue; // 跳过空格
head = createNode(input);
head->next = head; // 首次添加节点使其自身作为头结点
head = head->next; // 更新头结点
}
return head;
}
// 插入节点函数
void insertNode(Node** head, int data, int position) {
Node* newNode = createNode(data);
Node* temp = *head;
for (int i = 0; i < position - 1 && temp != NULL; ++i) {
temp = temp->next;
}
if (temp == NULL) {
printf("插入位置超出链表范围\n");
return;
}
newNode->next = temp->next;
temp->next = newNode;
}
// 删除节点函数
void deleteNode(Node** head, int key) {
Node* temp = *head;
Node* prev = NULL;
if (temp != NULL && temp->data == key) {
*head = temp->next;
free(temp);
return;
}
while (temp != NULL && temp->data != key) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) {
printf("找不到要删除的节点\n");
return;
}
prev->next = temp->next;
free(temp);
}
// 打印链表
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
Node* initialHead = createLinkedList();
printList(initialHead); // 显示初始链表
int position, key;
printf("请输入插入位置和值(例如1, 5),输入-1结束操作: ");
scanf("%d %d", &position, &key);
if (position >= 0) {
insertNode(&initialHead, key, position);
printList(initialHead); // 插入操作后打印链表
}
printf("请输入要删除的数据: ");
scanf("%d", &key);
deleteNode(&initialHead, key);
printList(initialHead); // 删除操作后打印链表
return 0;
}
```
在这个程序中,我们首先创建链表,然后接受用户的输入进行插入和删除操作,最后打印出链表的变化。注意,这个示例假设用户会提供正确的操作数据,实际应用中需要处理错误输入情况。
阅读全文