设计程序创建一个单向链表,并输出链表中数据。要求:从键盘输入元素的值,并在此基础上实现元素插入、删除及按值查找的的功能,用c语言实现
时间: 2024-02-15 21:02:57 浏览: 105
好的,我来为您设计实现一个单向链表,并实现元素插入、删除及按值查找的功能。以下是具体的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node *next;
} Node;
// 创建链表
Node *createLinkedList() {
Node *head = (Node*)malloc(sizeof(Node)); // 创建头节点
head->next = NULL; // 头节点的指针域初始化为NULL
return head;
}
// 在链表末尾添加节点
void addNode(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;
}
// 在链表中删除节点
void deleteNode(Node *head, int data) {
Node *p = head;
while(p->next != NULL) {
if(p->next->data == data) {
Node *temp = p->next;
p->next = p->next->next;
free(temp);
printf("删除成功!\n");
return;
}
p = p->next;
}
printf("未找到要删除的节点!\n");
}
// 在链表中查找节点
void findNode(Node *head, int data) {
Node *p = head->next;
int index = 1;
while(p != NULL) {
if(p->data == data) {
printf("查找成功!元素%d在链表中的位置为%d\n", data, index);
return;
}
p = p->next;
index++;
}
printf("未找到要查找的元素!\n");
}
// 输出链表中的数据
void printLinkedList(Node *head) {
Node *p = head->next; // 从头节点的下一个节点开始输出
while(p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Node *head = createLinkedList(); // 创建链表
int choice = 0;
int data = 0;
while(1) {
printf("请选择操作:\n");
printf("1. 添加元素\n");
printf("2. 删除元素\n");
printf("3. 查找元素\n");
printf("4. 输出链表\n");
printf("5. 退出\n");
scanf("%d", &choice);
switch(choice) {
case 1:
printf("请输入要添加的元素:");
scanf("%d", &data);
addNode(head, data);
break;
case 2:
printf("请输入要删除的元素:");
scanf("%d", &data);
deleteNode(head, data);
break;
case 3:
printf("请输入要查找的元素:");
scanf("%d", &data);
findNode(head, data);
break;
case 4:
printLinkedList(head);
break;
case 5:
printf("谢谢使用!\n");
return 0;
default:
printf("输入错误,请重新选择!\n");
break;
}
}
return 0;
}
```
以上就是我为您设计实现的单向链表代码,可以通过不同的操作实现元素插入、删除及按值查找的功能。
阅读全文