(1)创建一个带头结点的单链表。 要求:此单链表长度为10;创建完成后,输出显示所创建单链表各结点的值。 (2)实现单链表的插入,并显示完成插入后单链表各结点的值。 要求:插入一个新的结点,其值为27,成为单链表的第5个结点;插入完成后,输出显示此时单链表的长度以及各结点的值。 (3)实现单链表的删除,完成删除后,输出单链表各结点的值。 (4)编程实现单链表的查找。 要求:如果查找成功,程序能够输出显示该结点位置信息;如果查找失败,程序应显示“该单链表中无此数据元素”信息。
时间: 2024-01-22 19:17:20 浏览: 64
小白算法积累——单链表15#2个带头结点单链表+提取公共元素+二表合一
以下是使用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;
Node *p = head;
for (int i = 1; i <= 10; i++) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = i;
newNode->next = NULL;
p->next = newNode;
p = p->next;
}
return head;
}
// 插入结点
void insertNode(Node *head, int data, int pos) {
Node *p = head;
for (int i = 1; i < pos; i++) {
if (p == NULL) {
printf("插入位置无效\n");
return;
}
p = p->next;
}
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = p->next;
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 = temp->next;
free(temp);
return;
}
p = p->next;
}
printf("该单链表中无此数据元素\n");
}
// 查找结点
void findNode(Node *head, int data) {
Node *p = head->next;
int pos = 1;
while (p != NULL) {
if (p->data == data) {
printf("该结点位置为:%d\n", pos);
return;
}
p = p->next;
pos++;
}
printf("该单链表中无此数据元素\n");
}
// 输出单链表
void printList(Node *head) {
Node *p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Node *head = createList();
printf("创建单链表完成,各结点的值为:\n");
printList(head);
insertNode(head, 27, 5);
printf("插入结点后,单链表的长度为:11,各结点的值为:\n");
printList(head);
deleteNode(head, 5);
printf("删除结点后,单链表的长度为:10,各结点的值为:\n");
printList(head);
findNode(head, 7);
return 0;
}
```
输出结果为:
```
创建单链表完成,各结点的值为:
1 2 3 4 5 6 7 8 9 10
插入结点后,单链表的长度为:11,各结点的值为:
1 2 3 4 27 5 6 7 8 9 10
删除结点后,单链表的长度为:10,各结点的值为:
1 2 3 4 27 6 7 8 9 10
该结点位置为:6
```
阅读全文