数据结构实验2——线性表

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

项目名称 内容
课程名称 数据结构
班级 网安XXX
指导教师 郑如滨
学生姓名 王鑫杰
学号 47
实验项目名称 线性表
上机实践日期 3月12日
上机实践时间 2学时

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

  • 熟悉顺序表的定义及其上的常用操作。
  • 熟悉链表的定义及其上的常用操作
  • 掌握使用Visual Studio的调试功能查看链表中的内容。
  • 学习区间删除,头插法,尾插法的实现与优化。
  • 理解数据结构在实际问题中的应用。

二、实验内容与设计思想

题目1:区间删除

函数相关伪代码

void CreateList(SqList &L,int n)//(创建链表将数据填入并记录长度)
{
   创建新链表L;
   线性表的长度等于n;
   循环将给出数据填入线性表中;
}

void DelNode(SqList &L,int min,int max)//删除区间中的数;
{
   int i=0;
   for(int j=0;j<n;j++)
   {
      if(值>max ||值<min)
      L->data[i] = L->data[j];
      i++;  
   }
      线性表长度等于i;
}

void DispList(SqList L)
{
    if(线性表长度为0) cout<<"线性表为空!";
    for(int i=0;i<L->length;i++)
    {
        if(i==0) cout<<L->data[i];
        else cout<<" "<<L->data[i];
    }
    cout<<endl;
}

函数代码

void CreateList(SqList &L,int n)
{
    L = new List;
    L->length = n;
    for (int i = 0; i < n; ++i) 
    {
        cin >> L->data[i];
    }
}
void DelNode(SqList &L,int min,int max)
{
    int i=0,j=0;
    for(i=0;i<L->length;i++)
    {
        if(L->data[i]>max||L->data[i]<min)
        {
            L->data[j]=L->data[i];
            j++;
        }
    }
    L->length=j;
}
void DispList(SqList L)
{
    if(L->length==0) cout<<"线性表为空!";
    for(int i=0;i<L->length;i++)
    {
        if(i==0) cout<<L->data[i];
        else cout<<" "<<L->data[i];
    }
    cout<<endl;
}

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

函数相关伪代码

void CreateListF(LinkList& L, int n)//将数据用头插法的方式录入栈中。
{

    L = new LNode;
    L的指针指向NULL;
    for(int i=0;i<n;i++){
        LinkList p = new LNode;
        将数据录入p中的data;
        将p的指针和L的指针指向同一个位置;
        L->next = p;
    }
}

void DispList(LinkList L)//将栈中的数输出。
{
     新建一个Lnode*s = L->next;
    if(s为NULL) {
        cout << "空链表!";
    }
    else
    {
        cout << s->data;
        s = s->next;
        while (s)
        {
            cout << " " << s->data;
            s = s->next;
        }
    }
    cout << endl;
}

void CreateListR(LinkList& L, int n)//尾插法建链表,L表示带头结点链表,n表示数据元素个数
{
    L = new LNode;
    L->next = NULL;
    LNode* r = L;
    for (int i = 0; i < n; i++) {
        ElemType m;
        cin >> m;
        LinkList p = new LNode;
        p->data = m;
        p->next = NULL;
        r->next = p;
        r = p;
    }
}

函数代码

void CreateListF(LinkList& L, int n){

    L = new LNode;
    L->next = NULL;
    for(int i=0;i<n;i++){
        ElemType m;
        cin >> m;
        LinkList p = new LNode;
        p->data = m;
        p->next = L->next;
        L->next = p;
    }
}

void DispList(LinkList L)
{
     LNode* s = L->next;
    if(!s) {
        cout << "空链表!";
    }
    else
    {
        cout << s->data;
        s = s->next;
        while (s)
        {
            cout << " " << s->data;
            s = s->next;
        }
    }
    cout << endl;
}

void CreateListR(LinkList& L, int n)//尾插法建链表,L表示带头结点链表,n表示数据元素个数
{
    L = new LNode;
    L->next = NULL;
    LNode* r = L;
    for (int i = 0; i < n; i++) {
        ElemType m;
        cin >> m;
        LinkList p = new LNode;
        p->data = m;
        p->next = NULL;
        r->next = p;
        r = p;
    }
}

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


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

题目1:区间删除

本机运行截图
本机截图

PTA提交截图
PTA提交截图

题目2:头插法

本机运行截图
本机截图

PTA提交截图
PTA提交截图

题目3:尾插法

本机运行截图
本机截图

PTA提交截图
PTA提交截图


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

遇到的问题及解决方法:

  1. 问题:运行时显示内存分配异常。
  • 解决方法:再建立一个指针指向线性表。
  1. 问题:当线性表为空时不输出“线性表为空!”
  • 解决方法:再建立一个指针指向线性表。

实验体会和收获:

  • 学会了如何使用Visual Stdio 2022.
  • 掌握了基本的代码调试方法。
  • 学会Markdown的写法。

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

1.数据结构课本

posted @ 2025-03-15 15:50  w4ngXj  阅读(49)  评论(0)    收藏  举报