使用C语言编写一个对单链表进行基本操作的系统,主要包括表的创建、输入、查询、取值、插入、删除和输出等操作
时间: 2023-12-21 21:03:13 浏览: 73
抱歉,我是语言模型AI,我无法编写代码。不过,以下是一个使用C语言编写的单链表基本操作示例,供您参考:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表节点结构体
typedef struct ListNode {
int data;
struct ListNode *next;
} ListNode;
// 创建单链表
ListNode* createList() {
int n, i;
ListNode *head, *p, *q;
printf("请输入单链表的节点个数:");
scanf("%d", &n);
head = (ListNode*) malloc(sizeof(ListNode)); // 创建头结点
head->next = NULL; // 头结点指针域初始化为NULL
p = head; // p指向头结点,初始为空链表
printf("请依次输入每个节点的值:");
for (i = 0; i < n; i++) {
q = (ListNode*) malloc(sizeof(ListNode)); // 创建新节点
scanf("%d", &q->data); // 输入新节点的数据
q->next = NULL; // 新节点的指针域初始化为NULL
p->next = q; // 将新节点插入到链表尾部
p = q; // p指向新节点,继续循环
}
return head;
}
// 遍历单链表
void traversalList(ListNode *head) {
ListNode *p = head->next; // p指向第一个节点
printf("单链表节点值依次为:");
while (p != NULL) {
printf("%d ", p->data); // 输出节点的数据
p = p->next; // p指向下一个节点
}
printf("\n");
}
// 查询单链表
void searchList(ListNode *head) {
int pos = 0, value;
ListNode *p = head->next; // p指向第一个节点
printf("请输入要查询的节点值:");
scanf("%d", &value);
while (p != NULL && p->data != value) {
p = p->next; // p指向下一个节点
pos++; // 记录当前节点的位置
}
if (p == NULL) {
printf("未找到该节点!\n");
} else {
printf("该节点的位置为:%d\n", pos);
}
}
// 取值单链表
void getValueList(ListNode *head) {
int pos, i = 0;
ListNode *p = head->next; // p指向第一个节点
printf("请输入要取值的节点位置:");
scanf("%d", &pos);
while (p != NULL && i < pos) {
p = p->next; // p指向下一个节点
i++; // 记录当前节点的位置
}
if (p == NULL) {
printf("未找到该节点!\n");
} else {
printf("该节点的值为:%d\n", p->data);
}
}
// 插入单链表
void insertList(ListNode *head) {
int pos, value, i = 0;
ListNode *p = head, *q;
printf("请输入要插入的节点位置:");
scanf("%d", &pos);
while (p != NULL && i < pos - 1) {
p = p->next; // p指向下一个节点
i++; // 记录当前节点的位置
}
if (p == NULL) {
printf("未找到插入位置!\n");
} else {
q = (ListNode*) malloc(sizeof(ListNode)); // 创建新节点
printf("请输入要插入的节点值:");
scanf("%d", &q->data); // 输入新节点的数据
q->next = p->next; // 将新节点插入到链表中
p->next = q;
printf("节点插入成功!\n");
}
}
// 删除单链表
void deleteList(ListNode *head) {
int pos, i = 0;
ListNode *p = head, *q;
printf("请输入要删除的节点位置:");
scanf("%d", &pos);
while (p->next != NULL && i < pos - 1) {
p = p->next; // p指向下一个节点
i++; // 记录当前节点的位置
}
if (p->next == NULL) {
printf("未找到删除位置!\n");
} else {
q = p->next; // q指向要删除的节点
p->next = q->next; // 将要删除的节点从链表中删除
free(q); // 释放被删除节点的内存
printf("节点删除成功!\n");
}
}
// 主函数
int main() {
ListNode *head = createList(); // 创建单链表
traversalList(head); // 遍历单链表
searchList(head); // 查询单链表
getValueList(head); // 取值单链表
insertList(head); // 插入单链表
traversalList(head); // 遍历单链表
deleteList(head); // 删除单链表
traversalList(head); // 遍历单链表
return 0;
}
```
该程序中,使用了单链表节点结构体,定义了单链表的基本操作函数,包括创建单链表、遍历单链表、查询单链表、取值单链表、插入单链表、删除单链表等。在主函数中,调用了这些函数,实现了对单链表的基本操作。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231044833.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![7z](https://img-home.csdnimg.cn/images/20241231044736.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://img-home.csdnimg.cn/images/20250102104920.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pptx](https://img-home.csdnimg.cn/images/20241231044947.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)