数据结构链表实验报告

集美大学课程实验报告-实验2:线性表

项目名称 内容
课程名称 数据结构
班级 网安2411
指导教师 郑如滨
学生姓名 于鸿硕
学号 202421336018
实验项目名称 实验2:线性表
上机实践日期
上机实践时间 2学时


一、目的(本次实验所涉及并要求掌握的知识点)

  • 学习链表的创建方法 学习链表的逆置、插入和删除功能

二、实验内容与设计思想

#include <iostream>
using namespace std;
    return 0

题目1:头插法或尾插法创建链表

函数代码

//头插法:
void CreateListF(LinkList &L,int n)
{
    L=new LNode;
    L->next=nullptr;
    int inputdata;
    for(int i=0;i<n;i++)
    {
        cin>>inputdata;
        LNode* newNode=new LNode;
        newNode->data=inputdata;
        newNode->next=L->next;
        L->next=newNode;
    }
}

//尾插法:
void CreateListR(LinkList &L, int n)
{
    L=new LNode;
    L->next=nullptr;
    LNode *tail=L;
    int inputdata;
    for(int i=0;i<n;i++)
    {
        cin>>inputdata;
        LNode *newNode=new LNode;
        newNode->data=inputdata;
        newNode->next=nullptr;
        tail->next=newNode;
        tail=newNode;
    }
}

//输出链表:
void DispList(LinkList L)
{
    LNode* current=L->next;
    int a=0;
    while (current!=nullptr)
    {
        a=1;
        cout<<current->data;
        if(current->next!=nullptr)
        {
            cout<<" ";
        }
        current=current->next;
    }
    if(a==0)cout<<"空链表!";
}

**题目2:链表逆置*:

void ReverseList(LinkList &L)
{
    LNode *prev = nullptr;
    LNode *curr = L->next;
    LNode *next = nullptr;
    while (curr != nullptr) 
    {
        next = curr->next;
        curr->next = prev;
        prev = curr;
        curr = next;
    }
    L->next = prev; 
}

题目3:有序链表的插入与删除

void ListInsert(LinkList &L,ElemType e)
{
    LNode *pre=L;
    LNode *p=L->next;
    while(p!=nullptr&&p->data<e)
    {
        pre=p=p;
        p=p->next;
    }
    LNode *newNode=new LNode;
    newNode->data=e;
    newNode->next=p;
    pre->next=newNode;
}

void ListDelete(LinkList &L,ElemType e)
{
    LNode *pre=L;
    LNode *p=L->next;
    while (p!=nullptr&&p->data!=e)
    {
        pre = p;
        p = p->next;
    }
    if(p!=nullptr)
    {
        pre->next=p->next;
        delete p;
    }
    else
    {
        cout<<e<<"找不到!"<<endl;
    }
}


三、实验使用环境(本次实验所使用的平台和相关软件)

以下请根据实际情况编写

  • 操作系统:Windows 11
  • 编程语言:C++
  • 开发工具:visual studio2022 &pintia
  • 编译器:g++

四、实验步骤和调试过程(实验步骤、测试数据设计、测试结果分析)

题目1:头插法和尾插法运行截图

本机运行截图
image-20250316200813141

PTA提交截图
image-20250316200558642


image-20250316202033883

题目2:链表逆置运行截图

image-20250316210803221

image-20250316203443073

题目3:有序链表的插入与删除

image-20250316210828579

image-20250316210234467


五、实验小结(实验中遇到的问题及解决过程、实验体会和收获)

遇到的问题及解决方法:

在删除链表元素这题中,链表全删情况需要在最后输出“空链表”,但我在编写代码中通过在删除函数中加入验证temp=null时会重复输出n次,而如果要实现只输出一次,按照我的理解应该要在displist函数里加入相关代码,但强加该函数会导致编译错误,该问题尚未解决

实验体会和收获:

学习了链表的两种创建方式,学习了有序链表的插入和删除元素,学习了链表通过迭代逆置的方法


六、附件(参考文献和相关资料)

posted @ 2025-03-16 21:14  KinthYu  阅读(25)  评论(0)    收藏  举报