基于C语言编程实现一个对单链表进行基本操作的系统,主要包括创建、输入、查询、取值、插入、删除和输出
时间: 2023-10-20 09:19:04 浏览: 54
单链表基本操作系统的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node *next;
} Node, *LinkList;
// 创建链表
LinkList createList() {
LinkList head = (LinkList)malloc(sizeof(Node));
head->next = NULL;
return head;
}
// 插入节点
void insertNode(LinkList head, int pos, int data) {
Node *p = head;
int i = 0;
while (p && i < pos - 1) {
p = p->next;
i++;
}
if (!p || i > pos - 1) {
printf("插入位置错误!\n");
return;
}
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = p->next;
p->next = newNode;
}
// 删除节点
void deleteNode(LinkList head, int pos) {
Node *p = head;
int i = 0;
while (p->next && i < pos - 1) {
p = p->next;
i++;
}
if (!p->next || i > pos - 1) {
printf("删除位置错误!\n");
return;
}
Node *temp = p->next;
p->next = temp->next;
free(temp);
}
// 修改节点
void modifyNode(LinkList head, int pos, int data) {
Node *p = head->next;
int i = 1;
while (p && i < pos) {
p = p->next;
i++;
}
if (!p || i > pos) {
printf("修改位置错误!\n");
return;
}
p->data = data;
}
// 查询节点
int searchNode(LinkList head, int data) {
Node *p = head->next;
int i = 1;
while (p) {
if (p->data == data) {
return i;
}
p = p->next;
i++;
}
return -1;
}
// 取值
int getValue(LinkList head, int pos) {
Node *p = head->next;
int i = 1;
while (p && i < pos) {
p = p->next;
i++;
}
if (!p || i > pos) {
printf("位置错误!\n");
return -1;
}
return p->data;
}
// 输出链表
void printList(LinkList head) {
Node *p = head->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 主函数
int main() {
LinkList head;
head = createList();
printf("1.插入节点\n");
printf("2.删除节点\n");
printf("3.修改节点\n");
printf("4.查询节点\n");
printf("5.取值\n");
printf("6.输出链表\n");
printf("0.退出\n");
int choice, pos, data, result;
while (1) {
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入要插入的位置和数据:");
scanf("%d%d", &pos, &data);
insertNode(head, pos, data);
break;
case 2:
printf("请输入要删除的位置:");
scanf("%d", &pos);
deleteNode(head, pos);
break;
case 3:
printf("请输入要修改的位置和数据:");
scanf("%d%d", &pos, &data);
modifyNode(head, pos, data);
break;
case 4:
printf("请输入要查询的数据:");
scanf("%d", &data);
result = searchNode(head, data);
if (result == -1) {
printf("未找到该节点!\n");
} else {
printf("该节点在第%d个位置!\n", result);
}
break;
case 5:
printf("请输入要取值的位置:");
scanf("%d", &pos);
result = getValue(head, pos);
if (result == -1) {
printf("无法取值!\n");
} else {
printf("该位置的值为%d!\n", result);
}
break;
case 6:
printf("链表内容为:");
printList(head);
break;
case 0:
exit(0);
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
```
该系统可以通过用户的输入对单链表进行基本操作,包括插入、删除、修改、查询、取值和输出等。用户可以根据自己的需要对单链表进行操作,方便快捷。