用c语言写带头结点的单链表的查找删除添加遍历等操作,并且能输入元素
时间: 2023-05-14 17:05:20 浏览: 113
带头结点单链表基本操作.doc
非常感谢您的提问!以下是用 C 语言编写带头结点的单链表的查找、删除、添加、遍历等操作的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node *next;
} Node;
// 创建链表头节点
Node *createList() {
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 && p->data != data) {
p = p->next;
}
return p;
}
// 在链表中删除元素
void delete(Node *head, int data) {
Node *p = head;
while (p->next != NULL && p->next->data != data) {
p = p->next;
}
if (p->next != NULL) {
Node *temp = p->next;
p->next = temp->next;
free(temp);
}
}
// 遍历链表并输出元素
void traverse(Node *head) {
Node *p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Node *head = createList();
int data;
printf("请输入要插入的元素(输入-1结束):");
scanf("%d", &data);
while (data != -1) {
insert(head, data);
printf("请输入要插入的元素(输入-1结束):");
scanf("%d", &data);
}
printf("链表中的元素为:");
traverse(head);
printf("请输入要查找的元素:");
scanf("%d", &data);
Node *result = search(head, data);
if (result != NULL) {
printf("元素 %d 在链表中\n", data);
} else {
printf("元素 %d 不在链表中\n", data);
}
printf("请输入要删除的元素:");
scanf("%d", &data);
delete(head, data);
printf("删除后的链表中的元素为:");
traverse(head);
return 0;
}
```
希望这个示例代码能够帮助您理解如何用 C 语言编写带头结点的单链表的查找、删除、添加、遍历等操作。如果您有任何问题或建议,请随时告诉我。
阅读全文