C语言实现:三、实验内容 《单链表的实现及基本操作》 通过键盘创建有若干个元素(可以是整型数值)的单链表,实现对单链表的初始化,对已建立的顺序表插入操作、删除操作、查找操作、遍历输出单链表。 要求各个操作均以函数的形式实现,并且在主函数中调用各个函数实现以下操作: (1)键盘输入单链表x、x、x、x、x、x,并输出显示,其中x为任意整数。 (2)在单链表的第4个位置插入67,并输出单链表中的各元素值。 (3)删除单链表中的第2个数据元素,并输出单链表中的各元素值。 (4)查找单链表中的第5个元素并输出该元素的值。 【样例1输入】 12 47 52 36 24 【样例1输出】 12 47 52 36 24 12 47 52 67 36 24 12 52 67 36 24 第5个元素是 24 【样例2输入】 4 5 1 7 8 【样例2输出】 4 5 1 7 8 4 5 1 67 7 8 4 1 67 7 8 第5个元素是 8
时间: 2024-02-19 08:00:31 浏览: 118
好的,这是一道关于单链表的实现的问题。我会尽力回答你的问题。
以下是C语言的代码实现,可以通过键盘输入若干个元素,然后进行单链表的初始化、插入、删除、查找和遍历操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表结构体
typedef struct node {
int data; // 数据域
struct node *next; // 指针域
} Node, *LinkedList;
// 初始化单链表
LinkedList initList() {
LinkedList head = (LinkedList)malloc(sizeof(Node));
head->next = NULL;
return head;
}
// 插入元素
LinkedList insertNode(LinkedList head, int pos, int value) {
Node *p = head;
for (int i = 1; i < pos && p != NULL; i++) {
p = p->next;
}
if (p == NULL) {
printf("Error: 插入位置无效!\n");
return head;
}
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = p->next;
p->next = newNode;
return head;
}
// 删除元素
LinkedList deleteNode(LinkedList head, int pos) {
if (head == NULL) {
printf("Error: 链表为空!\n");
return NULL;
}
Node *p = head;
for (int i = 1; i < pos && p != NULL; i++) {
p = p->next;
}
if (p == NULL || p->next == NULL) {
printf("Error: 删除位置无效!\n");
return head;
}
Node *q = p->next;
p->next = q->next;
free(q);
return head;
}
// 查找元素
int searchNode(LinkedList head, int pos) {
Node *p = head;
for (int i = 1; i <= pos && p != NULL; i++) {
p = p->next;
}
if (p == NULL) {
printf("Error: 查找位置无效!\n");
return -1;
}
return p->data;
}
// 遍历单链表
void traverseList(LinkedList head) {
if (head == NULL) {
printf("Error: 链表为空!\n");
return;
}
Node *p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
LinkedList head = initList(); // 初始化单链表
int value, pos;
// 输入单链表元素
printf("请输入单链表的元素(以-1结束):");
while (scanf("%d", &value) != EOF && value != -1) {
head = insertNode(head, 999, value); // 在末尾插入元素
}
// 输出单链表
printf("单链表的元素为:");
traverseList(head);
// 在第4个位置插入元素67
head = insertNode(head, 4, 67);
printf("在第4个位置插入元素67:");
traverseList(head);
// 删除第2个元素
head = deleteNode(head, 2);
printf("删除第2个元素:");
traverseList(head);
// 查找第5个元素
int result = searchNode(head, 5);
printf("第5个元素是 %d\n", result);
return 0;
}
```
这里使用了结构体来定义单链表,其中`data`表示数据域,`next`表示指针域。函数`initList()`用于初始化单链表,函数`insertNode()`用于在指定位置插入元素,函数`deleteNode()`用于删除指定位置的元素,函数`searchNode()`用于查找指定位置的元素,函数`traverseList()`用于遍历单链表。在主函数中,首先输入单链表元素,然后进行插入、删除、查找和遍历操作,最后输出结果。
希望这个代码能够帮到你,如果你还有其他问题,可以继续问我。
阅读全文