给我一个用c语言实现利用链表的插入运算建立线性链表,然后利用链表的查找、删除、计数、输出等运算反复实现链表的这些操作(插入、删除、查找、计数、输出单独写成函数的形式,编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法最后将这些功能并能在屏幕上输出操作前后的结果
时间: 2023-12-13 15:04:44 浏览: 31
好的,以下是一个简单的用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 insert(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;
}
// 查找链表中是否存在某个元素
Node *search(Node *head, int data) {
Node *p = head->next;
while (p != NULL) {
if (p->data == data) {
return p;
}
p = p->next;
}
return NULL;
}
// 删除链表中的某个元素
void delete(Node *head, int data) {
Node *p = head;
while (p->next != NULL) {
if (p->next->data == data) {
Node *deletedNode = p->next;
p->next = p->next->next;
free(deletedNode);
return;
}
p = p->next;
}
}
// 计算链表中元素的个数
int count(Node *head) {
int count = 0;
Node *p = head->next;
while (p != NULL) {
count++;
p = p->next;
}
return count;
}
// 输出链表中的所有元素
void print(Node *head) {
Node *p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 主函数
int main() {
Node *head = initList(); // 初始化链表
int choice, data;
while (1) {
printf("\n1. 插入元素");
printf("\n2. 删除元素");
printf("\n3. 查找元素");
printf("\n4. 计算元素个数");
printf("\n5. 输出链表");
printf("\n6. 退出");
printf("\n请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入要插入的元素:");
scanf("%d", &data);
insert(head, data);
printf("插入成功!\n");
break;
case 2:
printf("请输入要删除的元素:");
scanf("%d", &data);
delete(head, data);
printf("删除成功!\n");
break;
case 3:
printf("请输入要查找的元素:");
scanf("%d", &data);
Node *result = search(head, data);
if (result == NULL) {
printf("元素不存在!\n");
} else {
printf("元素存在!\n");
}
break;
case 4:
printf("链表中元素的个数为:%d\n", count(head));
break;
case 5:
printf("链表中的所有元素为:");
print(head);
break;
case 6:
printf("谢谢使用!\n");
return 0;
default:
printf("无效选项!\n");
break;
}
}
}
```
这个程序实现了链表的插入、删除、查找、计数、输出等操作,并且在主函数中设计了一个简单的菜单,可以方便地调用这些操作。你可以根据需要进行修改和调试。