用c语言设计程序创建一个单向链表,并输出链表中数据。要求:从键盘输入元素的值,并在此基础上实现元素插入、删除及按值查找的功能。
时间: 2024-02-15 09:02:31 浏览: 21
好的,我可以为您提供一个基本的单向链表实现的代码框架,您可以在此基础上进行修改和完善。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct node {
int data;
struct node *next;
};
// 创建链表
struct node *create_list()
{
struct node *head = NULL, *tail = NULL;
int data;
printf("请输入链表元素,以-1结束:\n");
while (1) {
scanf("%d", &data);
if (data == -1) break;
struct node *new_node = (struct node*)malloc(sizeof(struct node));
new_node->data = data;
new_node->next = NULL;
if (head == NULL) {
head = tail = new_node;
} else {
tail->next = new_node;
tail = new_node;
}
}
return head;
}
// 输出链表
void print_list(struct node *head)
{
printf("链表中的元素为:");
while (head) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
// 插入元素
void insert_element(struct node *head, int value)
{
struct node *new_node = (struct node*)malloc(sizeof(struct node));
new_node->data = value;
new_node->next = head->next;
head->next = new_node;
}
// 删除元素
void delete_element(struct node *head, int value)
{
struct node *p = head, *pre = NULL;
while (p) {
if (p->data == value) {
if (pre == NULL) {
head = p->next;
} else {
pre->next = p->next;
}
free(p);
break;
}
pre = p;
p = p->next;
}
}
// 按值查找元素
void search_element(struct node *head, int value)
{
struct node *p = head;
int index = 0;
while (p) {
index++;
if (p->data == value) {
printf("元素%d的值为%d\n", index, value);
return;
}
p = p->next;
}
printf("链表中不存在值为%d的元素\n", value);
}
int main()
{
struct node *head = create_list();
print_list(head);
// 插入元素
int insert_value;
printf("请输入要插入的元素的值:");
scanf("%d", &insert_value);
insert_element(head, insert_value);
print_list(head);
// 删除元素
int delete_value;
printf("请输入要删除的元素的值:");
scanf("%d", &delete_value);
delete_element(head, delete_value);
print_list(head);
// 按值查找元素
int search_value;
printf("请输入要查找的元素的值:");
scanf("%d", &search_value);
search_element(head, search_value);
return 0;
}
```
以上代码实现了单向链表的基本功能,包括创建链表、输出链表、插入元素、删除元素、按值查找元素等功能。您可以根据自己的需要进行修改和完善。