整数单链表的建立、查找、插入、删除、输出程序(线性表的链式存储实现),表中不允许有重复数据,保存为LinkList文件
时间: 2023-10-19 18:10:32 浏览: 131
链表功能有建立,排序,插入,删除,输出
以下是整数单链表的建立、查找、插入、删除、输出程序的实现:
```
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建链表
Node* createList() {
int n;
printf("请输入链表长度:");
scanf("%d", &n);
Node* head = (Node*)malloc(sizeof(Node)); // 头节点不存储数据
head->next = NULL;
Node* tail = head; // 链表尾部指针
for (int i = 0; i < n; i++) {
int value;
printf("请输入第%d个节点的值:", i + 1);
scanf("%d", &value);
// 判断是否存在相同的节点
Node* p = head->next;
while (p) {
if (p->data == value) {
printf("节点值重复,请重新输入!\n");
break;
}
p = p->next;
}
if (p) {
i--;
continue;
}
Node* node = (Node*)malloc(sizeof(Node));
node->data = value;
node->next = NULL;
tail->next = node;
tail = node;
}
return head;
}
// 查找节点
Node* findNode(Node* head, int value) {
Node* p = head->next;
while (p) {
if (p->data == value) {
return p;
}
p = p->next;
}
return NULL;
}
// 插入节点
void insertNode(Node* head, int value) {
Node* p = head->next;
Node* prev = head;
while (p) {
if (p->data == value) {
printf("节点值重复,无法插入!\n");
return;
}
if (p->data > value) {
break;
}
prev = p;
p = p->next;
}
Node* node = (Node*)malloc(sizeof(Node));
node->data = value;
node->next = p;
prev->next = node;
printf("节点插入成功!\n");
}
// 删除节点
void deleteNode(Node* head, int value) {
Node* p = head->next;
Node* prev = head;
while (p) {
if (p->data == value) {
prev->next = p->next;
free(p);
printf("节点删除成功!\n");
return;
}
prev = p;
p = p->next;
}
printf("节点不存在,无法删除!\n");
}
// 输出链表
void printList(Node* head) {
Node* p = head->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Node* head = createList();
while (1) {
printf("请选择操作:\n");
printf("1. 查找节点\n");
printf("2. 插入节点\n");
printf("3. 删除节点\n");
printf("4. 输出链表\n");
printf("5. 退出\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1: {
int value;
printf("请输入要查找的节点的值:");
scanf("%d", &value);
Node* node = findNode(head, value);
if (node) {
printf("节点存在!\n");
} else {
printf("节点不存在!\n");
}
break;
}
case 2: {
int value;
printf("请输入要插入的节点的值:");
scanf("%d", &value);
insertNode(head, value);
break;
}
case 3: {
int value;
printf("请输入要删除的节点的值:");
scanf("%d", &value);
deleteNode(head, value);
break;
}
case 4: {
printList(head);
break;
}
case 5: {
printf("程序已退出!\n");
return 0;
}
default: {
printf("无效的选择,请重新输入!\n");
break;
}
}
}
return 0;
}
```
将以上代码保存为LinkList.c文件,然后在命令行中编译运行即可:
```
gcc LinkList.c -o LinkList
./LinkList
```
阅读全文