使用c语言实现一个单链表的增删查改基本操作代码,并且生成菜单使用它
时间: 2024-03-01 20:50:59 浏览: 71
好的,以下是使用 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));
head->next = NULL;
return head;
}
// 增加节点
void addNode(Node* head, int data) {
Node* p = head;
while (p->next != NULL) {
p = p->next;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
p->next = newNode;
}
// 删除节点
void deleteNode(Node* head, int data) {
Node* p = head->next;
Node* pre = head;
while (p != NULL) {
if (p->data == data) {
pre->next = p->next;
free(p);
return;
}
pre = p;
p = p->next;
}
}
// 查找节点
Node* findNode(Node* head, int data) {
Node* p = head->next;
while (p != NULL) {
if (p->data == data) {
return p;
}
p = p->next;
}
return NULL;
}
// 修改节点
void modifyNode(Node* head, int oldData, int newData) {
Node* p = findNode(head, oldData);
if (p != NULL) {
p->data = newData;
}
}
// 打印链表
void printList(Node* head) {
Node* p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 释放链表
void freeList(Node* head) {
Node* p = head;
while (p != NULL) {
Node* tmp = p;
p = p->next;
free(tmp);
}
}
// 打印菜单
void printMenu() {
printf("\n");
printf("1. 增加节点\n");
printf("2. 删除节点\n");
printf("3. 查找节点\n");
printf("4. 修改节点\n");
printf("5. 打印链表\n");
printf("6. 退出程序\n");
printf("请选择操作:");
}
int main() {
Node* head = initList();
int choice = 0;
do {
printMenu();
scanf("%d", &choice);
switch (choice) {
case 1: {
int data;
printf("请输入要增加的数据:");
scanf("%d", &data);
addNode(head, data);
printf("增加成功!\n");
break;
}
case 2: {
int data;
printf("请输入要删除的数据:");
scanf("%d", &data);
deleteNode(head, data);
printf("删除成功!\n");
break;
}
case 3: {
int data;
printf("请输入要查找的数据:");
scanf("%d", &data);
Node* p = findNode(head, data);
if (p != NULL) {
printf("找到了该节点,值为:%d\n", p->data);
} else {
printf("没有找到该节点!\n");
}
break;
}
case 4: {
int oldData, newData;
printf("请输入要修改的数据:");
scanf("%d", &oldData);
printf("请输入新的数据:");
scanf("%d", &newData);
modifyNode(head, oldData, newData);
printf("修改成功!\n");
break;
}
case 5: {
printf("当前链表数据为:");
printList(head);
break;
}
case 6: {
printf("程序已退出!\n");
break;
}
default: {
printf("输入错误,请重新输入!\n");
break;
}
}
} while (choice != 6);
freeList(head);
return 0;
}
```
以上是基本的单链表增删查改操作及菜单的实现代码。您可以根据需要进行调整。
阅读全文