实验二 单某某的基本算法-实验 (1)

本文由用户“yakexiyakexi”分享发布 更新时间:2022-01-23 19:17:02 举报文档

以下为《实验二 单某某的基本算法-实验 (1)》的无排版文字预览,完整格式请下载

下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

实 验 报 告

实验二 单某某的基本算法

姓 名:

王某某



指导教师:

崔某某 助教



学 院:

信息科学与***



专 业:

计算机科学与技术(云计算)



班 级:

2020级云计算本科1班



完成日期:

2021年04月15日





实验二 单某某的基本算法

指导老师:崔某某

学生:王某某

学号:***0137

2020年04月15日

实验2.1 单某某的基本操作

(类别:验证性)

1 实验要求与目的

掌握链表的存储结构

掌握链表的各种基本操作

2 实验环境与模块简介

本教程绝大部分实验环境基于 Windows 2000/xp及以上版本,选用的编程环境为Turbo C 2.0或以上兼容版本、 VC++6.0或以上兼容版本。

3 实验原理与背景知识

用一组任意的存储单元存储线性表的数据元素,可以是零散分布在内存中的任意位置上的。链表中结点的逻辑次序和物理次序不一定相同。利用指针实现了用不相邻的存储单元存放逻辑上相邻的元素。

每个数据元素,除存储本身信息外,还需存储其直接后继的地址(或位置)信息,这个信息称为指针(pointer)或链(link)。

4 实验步骤

本实验三主要包括单某某的建立、插入和删除操作。

4.1 设计单某某存储结构

建立单某某的存储结构。单某某存储结构描述如下:

typedef struct Lnode {

DataType data; //数据域

struct Lnode *next; //指针域

}Lnode, *LinkList; // *LinkList为Lnode类型的指针

图3.1 单某某结点的结构示意图

4.2 建立单某某

建立单某某(尾插法):建立链表的过程是一个动态生成的过程,从空表状态,依次建立各元素结点,并逐个插入,每次均在链表表尾插入。为此必须增加一个尾指针r,使其始终指向当前链表的尾结点。具体算法描述如下:

从一个空表开始,重复读入数据:

?生成新结点;

将读入数据存放到新结点的数据域中;

将该新结点插入到链表的表尾,即新结点插在尾指针的后面;

直到读入数据结束为止。



图3.2 建立单某某插入节点前



图3.2 插入节点p后

LinkList createListR ( void )

{

int i=0;

DataType ch;

LinkList L= (LinkList) malloc (sizeof (LNode)); //建立表头结点

LNode *q, *r = L;

printf("请输入%d个整数构建单某某:\n",N);

for(i=0;idata = ch; //建立新结点

r ->next = q; r =q; //插入到表末端

}

r ->next = NULL;

内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 }

Lc->next = La?La:Lb ; //插入剩余段

} //MergeList_L,O(n1+n2)

实验代码:



实验结构:



5 结果分析与讨论

若La,Lb两个链表的长度分别是m,n,则链表合并的时间复杂度为O(m+n) 。

6 扩展与分析

定义一个逆置函数diverse(L),把链表进行逆置。在主程序中调用该函数,分析操作结果。

7 注意事项与资源

通过上述程序处理后,LC指针并不是指向归并后新单某某的头结点,La和Lb也不指向两个链表的表头, LC和La共用一个头结点,所以在调用该函数时,需要备份La的头结点或头指针,用于最后输出LC所指链表。

[文章尾部最后300字内容到此结束,中间部分内容请查看底下的图片预览]

以上为《实验二 单某某的基本算法-实验 (1)》的无排版文字预览,完整格式请下载

下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

图片预览