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

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

项目名称 内容
课程名称 数据结构
班级 网安2413
指导教师 郑如滨
学生姓名 许晴
学号 202421336069
实验项目名称
上机实践日期
上机实践时间 2学时

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

    1. 熟悉顺序表的定义及其上的常用操作。
    1. 熟悉链表的定义及其上的常用操作
    1. 掌握使用Visual Studio的调试功能查看链表中的内容。

二、实验内容与设计思想

题目1:区间删除

函数相关伪代码

// 定义链表节点结构
// 创建顺序表
void CreateList(SqList &L, int n)
    L->length = 0
    For i From 0 To n - 1
        输入元素data
        L->data[i] = data
    L->length = n
End

// 删除区间元素
void DelNode(SqList &L, int min, int max)
    int k = 0
    For i From 0 To L->length - 1
        If L->data[i] < min Or L->data[i] > max
            L->data[k] = L->data[i]
            k = k + 1
    L->length = k
End

// 输出顺序表
void DispList(SqList L)
    If L->length == 0
        Return
    For i From 0 To L->length - 2
        输出 L->data[i] + " "
    输出 L->data[L->length - 1]
End

函数代码

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;
    while (L->length > i) {
        if (L->data[i]<min || L->data[i]>max) {
            L->data[j] = L->data[i];
            j++;
        }
        i++;
    }
    L->length = j;
}
void DispList(SqList L) {
    int i = 0;
    if (L->length == 0) {
        cout << "线性表为空!";
    }
    else {
        cout << L->data[i];
        i++;
        while (i < L->length) {
            cout << " " << L->data[i];
            i++;
        }
    }
}

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

函数相关伪代码

//创建链表
    L = new Node(); // 创建头结点
    L->next = NULL; // 初始化
    
    for (int i = 0; i < n; i++) {
        Node *newNode = new Node(); // 创建新的节点
        cin >> newNode->data; // 从标准输入读取数据
        
        newNode->next = L->next; 
        L->next = newNode; 
    }

// 输出链表
    Node *current = L->next; // 从头结点的下一个节点开始遍历
    
    while (current != NULL) {
        cout << current->data << " "; // 输出当前节点的数据
        current = current->next; // 移动到下一个节点
    }
    
    cout << endl; // 输出换行符

函数代码

void CreateListF(LinkList &L,int n)//头插法建链表,L表示带头结点链表,n表示数据元素个数
{
    L = new LNode;
    L->next = nullptr;
    ElemType val;
    for (int i = 0; i < n; ++i) {
        cin >> val;
        LNode* newNode = new LNode;
        newNode->data = val;
        newNode->next = L->next;
        L->next = newNode;
    }
}
void DispList(LinkList L)//输出链表
{
    LinkList p = L->next;
    if (!p) {
        cout << "空链表!";
        return;
    }
    cout << p->data;
    p = p->next;
    while (p) {
        cout << " " << p->data;
        p = p->next;
    }
}

题目3:单链表的逆置

函数相关伪代码


// 逆置链表函数

    Node* p = L->next;
    Node* q;
    L->next = NULL; 
    while (p!= NULL) {
        q = p->next; 
        p->next = L->next;
        L->next = p;
        p = q; 
    }

函数代码

void ReverseList(LinkList &L) {
    if (L->next == nullptr) {
        return;
    }
    LinkList p = L->next;
    LinkList q;
    L->next = nullptr;
    while (p != nullptr) {
        q = p->next;
        p->next = L->next;
        L->next = p;
        p = q;
    }
}

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

以下请根据实际情况编写

  • 操作系统:Windows 11 professional
  • 编程语言:C++
  • 开发工具:[Visual Studio 2022]

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

题目1:区间删除

本机运行截图

PTA提交截图

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

本机运行截图

PTA提交截图

题目3:单链表逆置

本机运行截图

PTA提交截图


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

遇到的问题及解决方法:

  1. 问题:代码在vs上无法运行。
  • 解决方法:检查代码发现函数代码不完整,完整代码后解决问题。
  1. 问题:伪代码具体格式怎么写
  • 解决方法:借助AI,理解后自己书写。

实验体会和收获:

  • 借助AI解决问题
  • 掌握了基本的代码调试方法。

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

以下请根据实际情况编写

  1. 数据结构
  2. 实验2-线性表
posted @ 2025-03-19 14:57  计算机糕手  阅读(25)  评论(0)    收藏  举报