实验名称:链表的基本操作

实验目的:通过实践掌握链表的基本操作,深入理解数据结构的基本原理和算法设计思想。

实验内容:本次实验主要涉及链表的基本操作,包括链表的建立、插入、删除、查找和遍历等。

实验步骤:

  1. 首先定义链表的结构体,包括数据域和指针域。
typedef struct node {
    int data;
    struct node *next;
}Node, *LinkList;
  1. 编写链表的创建函数,包括链表的初始化和节点的插入操作。
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;
}
  1. 编写链表的插入函数,包括在链表的头部、中间和尾部插入节点。
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;
}
  1. 编写链表的删除函数,包括删除链表的头部、中间和尾部节点。
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;
}
  1. 编写链表的查找函数,包括查找链表中的某个节点。
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;
}
  1. 编写链表的遍历函数,包括从头到尾遍历链表的所有节点。
void TraversalLinkList(LinkList head) {
    LinkList p = head->next;
    while (p) {
        printf("%d ", p->data);
        p = p->next;
    }
}
  1. 最后,编写主函数调用以上函数进行链表操作。
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 

实验结论:通过本次实验,我们掌握了链表的基本操作,包括链表的建立、插入、删除、查找和遍历等,深入理解了数据结构的基本原理和算法设计思想

写一篇数据结构提高实验报告要求用C语言写出实验代码

原文地址: https://www.cveoy.top/t/topic/fbuH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录