帮我写个代码: 用C语言编程实现建立链表,并完成以下操作: 初始化链表。从键盘接受元素个数n以及n个整型数;通过键盘读取元素实现链表插入操作;通过键盘读取元素实现链表删除操作;通过键盘读取元素实现链表修改操作。
时间: 2023-08-04 20:11:43 浏览: 62
好的,下面是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
struct node {
int data;
struct node *next;
};
// 初始化链表
struct node *init_list() {
struct node *head = (struct node *)malloc(sizeof(struct node));
head->next = NULL;
return head;
}
// 插入元素
void insert_node(struct node *head, int val) {
struct node *newNode = (struct node *)malloc(sizeof(struct node));
newNode->data = val;
newNode->next = head->next;
head->next = newNode;
}
// 删除元素
void delete_node(struct node *head, int val) {
struct node *p = head->next;
struct node *pre = head;
while (p) {
if (p->data == val) {
pre->next = p->next;
free(p);
break;
}
pre = p;
p = p->next;
}
}
// 修改元素
void modify_node(struct node *head, int oldVal, int newVal) {
struct node *p = head->next;
while (p) {
if (p->data == oldVal) {
p->data = newVal;
break;
}
p = p->next;
}
}
int main() {
int n;
printf("请输入元素个数n:");
scanf("%d", &n);
struct node *head = init_list();
for (int i = 0; i < n; i++) {
int val;
printf("请输入第%d个元素:", i+1);
scanf("%d", &val);
insert_node(head, val);
}
printf("输入要删除的元素:");
int delVal;
scanf("%d", &delVal);
delete_node(head, delVal);
printf("输入要修改的元素和其新值:");
int oldVal, newVal;
scanf("%d%d", &oldVal, &newVal);
modify_node(head, oldVal, newVal);
return 0;
}
```
代码解释:
1. 定义了链表结构体 `struct node`,包含 `data` 和 `next` 两个成员变量。
2. `init_list()` 函数用于初始化链表,返回链表头指针。
3. `insert_node()` 函数用于插入元素,接收链表头指针和待插入元素的值作为参数。
4. `delete_node()` 函数用于删除元素,接收链表头指针和待删除元素的值作为参数。
5. `modify_node()` 函数用于修改元素,接收链表头指针、待修改元素的旧值和新值作为参数。
6. 在 `main()` 函数中,先输入元素个数,然后循环输入每个元素并插入到链表中。
7. 接着输入要删除的元素和要修改的元素以及其新值,然后分别调用删除和修改函数。
8. 最后返回0,程序结束。