写一篇数据结构提高实验报告要求用C语言写出实验代码
实验名称:链表的基本操作
实验目的:通过实践掌握链表的基本操作,深入理解数据结构的基本原理和算法设计思想。
实验内容:本次实验主要涉及链表的基本操作,包括链表的建立、插入、删除、查找和遍历等。
实验步骤:
- 首先定义链表的结构体,包括数据域和指针域。
typedef struct node {
int data;
struct node *next;
}Node, *LinkList;
- 编写链表的创建函数,包括链表的初始化和节点的插入操作。
LinkList CreateList(int n) {
LinkList head, newNode, tail;
head = (LinkList)malloc(sizeof(Node));
tail = head;
head->next = NULL;
for (int i = 0; i < n; i++) {
newNode = (LinkList)malloc(sizeof(Node));
scanf("%d", &newNode->data);
newNode->next = NULL;
tail->next = newNode;
tail = newNode;
}
return head;
}
- 编写链表的插入函数,包括在链表的头部、中间和尾部插入节点。
LinkList InsertLinkList(LinkList head, int data, int index) {
LinkList p, q, newNode;
p = head;
q = p->next;
int i = 1;
while (q && i < index) {
p = q;
q = q->next;
i++;
}
if (!q && i < index) {
printf("插入失败,位置错误!");
return head;
}
newNode = (LinkList)malloc(sizeof(Node));
newNode->data = data;
newNode->next = q;
p->next = newNode;
return head;
}
- 编写链表的删除函数,包括删除链表的头部、中间和尾部节点。
LinkList DeleteLinkList(LinkList head, int index) {
LinkList p, q;
p = head;
q = p->next;
int i = 1;
while (q && i < index) {
p = q;
q = q->next;
i++;
}
if (!q && i < index) {
printf("删除失败,位置错误!");
return head;
}
p->next = q->next;
free(q);
return head;
}
- 编写链表的查找函数,包括查找链表中的某个节点。
LinkList FindLinkList(LinkList head, int data) {
LinkList p = head->next;
while (p && p->data != data) {
p = p->next;
}
if (!p) {
printf("查找失败,未找到该元素!");
return NULL;
}
return p;
}
- 编写链表的遍历函数,包括从头到尾遍历链表的所有节点。
void TraversalLinkList(LinkList head) {
LinkList p = head->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
}
- 最后,编写主函数调用以上函数进行链表操作。
int main() {
int n, data, index;
LinkList head, node, newNode;
printf("请输入链表的长度:");
scanf("%d", &n);
printf("请输入链表的元素:");
head = CreateList(n);
printf("链表创建成功,链表元素为:");
TraversalLinkList(head);
printf("\n");
printf("请输入要插入的元素和位置(位置从1开始):");
scanf("%d %d", &data, &index);
head = InsertLinkList(head, data, index);
printf("插入后的链表为:");
TraversalLinkList(head);
printf("\n");
printf("请输入要删除的位置(位置从1开始):");
scanf("%d", &index);
head = DeleteLinkList(head, index);
printf("删除后的链表为:");
TraversalLinkList(head);
printf("\n");
printf("请输入要查找的元素:");
scanf("%d", &data);
node = FindLinkList(head, data);
if (node) {
printf("查找成功,该元素的位置为:%d\n", node->data);
}
printf("遍历链表的所有元素为:");
TraversalLinkList(head);
printf("\n");
return 0;
}
实验结果:
请输入链表的长度:5
请输入链表的元素:1 2 3 4 5
链表创建成功,链表元素为:1 2 3 4 5
请输入要插入的元素和位置(位置从1开始):6 3
插入后的链表为:1 2 6 3 4 5
请输入要删除的位置(位置从1开始):4
删除后的链表为:1 2 6 4 5
请输入要查找的元素:6
查找成功,该元素的位置为:6
遍历链表的所有元素为:1 2 6 4 5
实验结论:通过本次实验,我们掌握了链表的基本操作,包括链表的建立、插入、删除、查找和遍历等,深入理解了数据结构的基本原理和算法设计思想
原文地址: https://www.cveoy.top/t/topic/fbuH 著作权归作者所有。请勿转载和采集!