当前位置:首页 > 数据结构线性表实验报告
《数据结构》实验报告
院系 应用科技学院 专业 电子信息工程 姓名 陈高雪 学号120352010054 10 级 电信 班 2011 年 10 月 11日
1.实验目的
1.掌握线性表的基本运算。
2.掌握顺序村存储的概念,学会对顺序存储数据结构进行操作。
3.加深对顺序存储数据结构的理解,逐步培养解决实际问题的编程能力。
2.需求分析
要求用c语言编写一个演示程序,首先建立一个空表,然后根据用户选择,能够在线性
表的任意位置实现插入元素、删除元素、初始化线性表、查找某一元素的在线性表中得位置。 (1)建立线性表的功能
? 输入的形式和输入的范围:调用出入函数,输入插入的位置和数值,用逗号隔
?
开
输出的形式:调用输出函数,按顺序输出线性表所插入的值,以及所对应功能
的值。
(2)插入功能
? 输入的形式和输入值的范围:输入一个表示位置的正整数和一个表示插入元素
值的正整数,两个正整数之间用逗号隔开,出入位置的和法取值范围是
?
1 输出的形式:如果输入的参数合法,则按顺序显示插入后的线性表,否则显示 错误。 (3)删除功能 ? 输入的形式和输入值的范围:输入一个表示删除位置或要删除的元素值的正整 数,删除位置或删除元素值的取值范围是1 否则显示参数错误的信息。 ? 输出的形式:如果输入参数合法,则按顺序显示删除后线性表中的各个元素值,否则显示参数错误的信息。 (4)查找功能 ? 输入的形式和输入值的范围:输入一个要查找的元素值,元素值的合法取值范 围是正整数。 ? 输出的形式:如果存在要查找的元素,则显示要查找元素的位置,否则显示参 数错误信息。 3.概要设计 (1)为了实现上述程序功能,需要第一一个简化的线性表抽象数据类型: Typedef struct LinearList{ Int *list; Int size; Int MAXSIZE; }List; 基本操作: ? 初始化线性表ListInit (L) 操作前提:L是一个未初始化的线性表 操作结果:将L初始化成一个空的线性表 ? 向空表指定位置插入元素 ListInsert (L) 操作前提:L是一个还有位置的线性表 ? 操作结果:将元素插入到指定位子并输出线性表 删除指定元素值 ListDelete_1(L) 操作前提:线性表L存在 操作结果:将线性表中指定的元素值删除,并输出线性表 ? 删除指定位置的元素值 ListDelete_2(L) 操作前提:线性表L存在 操作结果:将线性表中指定位置的元素值删除,并输出线性表 查找线性表中的元素 ListFind(L) 操作前提:线性表L存在 操作结果:在线性表L中查找指定元素e,若存在该元素返回该元素在表中的位置,否则提示错误 输出线性表元素 OutputList(L) 操作前提:线性表存在 ? ? 操作结果:输出整线性表L的所有元素值 (2)本程序共有6函数: ? ? ? ? ? ? 主函数main() 初始化线性表函数InitList() 输出函数OutputList() 插入函数ListInsert() 删除函数ListDelete() 查找函数ListFind() 各函数的关系如下: ? ? ? ? 主函数Main()调用初始化线性表函数InitList()、插入函数ListInsert()、删除函数ListDelete()、查找函数ListFind()、查找函数ListFind() 插入函数ListInsert()调用输出函数OutputList(L) 删除函数ListDelete()调用输出函数OutputList(L) 查找函数ListFind()调用输出函数OutputList(L) (3)主函数的伪码 Main() { 定义一个字符参数 ch; 定义整形元素位置参数 i; 定义整形参数e,j=1; { 说明一个线性表L; 循环做下面处理,直到读入的为‘y’时推出: 根据具体选项,读入需要的数据,做下面的选择处理,知道循环结束: { 根据所选择选项调用相关的函数进行处理,然后输出处理后的线性表以及所要 执行的内容。 } } } 4.详细设计 采用线性表实现概要设计中的定义的抽象数据类型,有关数据数据类型和伪码算法 定义如下: (1)类型定义 typedef struct LinearList { int size; int *list; int MAXSIZE; }List; (2)基本操作的伪码算法 ? 初始化 ? void InitList(List &L) { 构造一个空表L; 定义空表长度为0; 初始存储空间的容量; } 插入操作 void ListInsert(List &L, int i, int e) { Int *p; 判断位置i是否合法 不合法返回空; 判断当前容量是否已满 { 申请一个新的基止newbase; L.list=newbase; 增加存储容量; } 定义插入位置*q; p>=q; --p) *(p+1) = *p; 插入元素e; 表长加1; ? } 删除操作 int ListDelete_1(List &L, int e, int &i) { 定义三个指针*p,*q,*m; P=L.list;; 循环做下面处理 { If(*p=e); { m=p; q=L.list+L.size-1; 被删除元素之后的元素左移; 表长减1; continue; p++; } i++; } return 1; ? } 查找操作 int ListFind(List L, int e) /*在顺序线性表L中查找第1个值与e满足compare()的元素的位序。 若找到,则返回其在L中的位序,否则返回0。*/ { 定义第一元素的存储位置为1; P=首元素的地址; While(i不能超过表长) ++I; if (i <= L.size) return i; else } return 0; 5.使用说明 程序名为实验1.exe,程序执行过程如下: 运行程序显示如下菜单: printf(\ ---线 性 表--- \\n\ printf(\printf(\ 1-----初 始 化 *\
共分享92篇相关文档