数据结构 实验一:实现单链表各种基本运算的算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
- 1 -
实验一:实现单链表各种基本运算的算法
一、 实验目的
1、 掌握单链表存储结构的类型定义;
2、 实现单链表各种基本运算的算法。
二、 实验环境
1、 Windows 操作系统;
2、 Visual C++ 6.0
三、 实验内容
实现单链表各种基本运算的算法。
四、 概要设计
1.存储结构的类型定义:
Typedef struct LNode
{
ElemType data;
Struct LNode *next;
}LinkList;
2.单链表示意图:
3.项目组成图:
4.algo2_2.cpp 的程序文件包含的函数原型及功能:
InitList(LinkList *&L) 初始化单链表L
DestroyList(LinkList *&L) 释放单链表L
ListEmpty(LinkList *L)判断单链表L 是否为空表
ListLength(LinkList *L)返回单链表L 的元素个数
DispList(LinkList *L)输出单链表L
GetElem(LinkList *L,int i,ElemType &e)获取单链表L 的第i 个元素
LocateElem(LinkList *L,ElemType e)在单链表L 中查找元素e
ListInsert(LinkList *&L,int i,ElemType e)在单链表L 中的第i 个位置上插入元素e
…… head a 1 a 2 a 3 a n ∧
ListDelete(LinkList *&L,int i,ElemType &e)在单链表L中删除第i个元素
5.exp2_2.cpp程序文件简介:
InitList(LinkList *&L) 初始化单链表L
DestroyList(LinkList *&L) 释放单链表L
ListEmpty(LinkList *L) 判断单链表L是否为空表
ListLength(LinkList *L) 返回单链表L的元素个数
DispList(LinkList *L) 输出单链表L
GetElem(LinkList *L,int i,ElemType &e) 获取单链表L的第i个元素
LocateElem(LinkList *L,ElemType e) 在单链表L中查找元素e
ListInsert(LinkList *&L,int i,ElemType e) 在单链表L中的第i个位置上插入元素e ListDelete(LinkList *&L,int i,ElemType &e) 在单链表L中删除第i个元素
6.proj2-2的项目的模块结构:
在文件algo2-2中,
(1)定义单链表结构类型;
(2)初始化单链表
(3)定义释放单链表的函数
(4)定义判断单链表是否为空的函数
(5)定义返回单链表元素个数的函数
(6)定义输出单链表的函数
(7)定义获取第i个元素的函数
(8)定义查找元素的函数
(9)定义插入元素的函数
(10)定义删除元素的函数
在文件exp2-2中分别调用algo2-2中所定义的函数
7.函数调用关系图:
五、详细设计
源代码清单见附录。
六、测试、改进、界面
要求:逐一测试各个功能,包括正常测试(例如插入——i在合理范围的测试)、极端情况的测试(例如插入——i超出下限、上限的测试),并逐一做出结论,对出现异常的要给出改进方案。1.测试:
(1)插入:
i=4:
i=-4:
i=44:
结论:当i在合理范围时,元素能够准确插入;当i超出下限时,元素能够插入,但总是插入第一个位置;当i超出上限时,元素不能插入。
(2)查找:
i=3:
i=-3:
i=33:
结论:当i在合理范围时,元素能够准确查找到;当i超出下限或超出上限时,元素无法查找。
(3)删除:
i=3:
i=-3:
i=33:
结论:当i在合理范围时,元素能够准确删除;当i超出下限时,元素能够删除,但总是删除第一个位置的元素;当i超出上限时,元素不能删除。
2.改进:为了使在极端情况下,程序能输出Error,修改代码,使其实现以下功能:(1)插入:
i=-4:
i=44:
(2)查找:
i=-3:
I=33:
(3)删除:
i=-3:
i=33:
附录——源代码清单
/*文件名:algo2_2.cpp*/
#include
#include
typedef char ElemType;
typedef struct LNode /*定义单链表结点类型*/
{
ElemType data;
struct LNode *next;
} LinkList;
void InitList(LinkList *&L)
{
L=(LinkList *)malloc(sizeof(LinkList)); /*创建头结点*/
L->next=NULL;