1、实验二单链表的操作2014秋学期算法与数据结构实验报告书 项目名称: 单链表的操作 指导老师: 金萍老师 项目时间: 2014-9-15 项目成员: 张峻峰 瞿子晶 目录一 引言 41.1 编写目的 41、 熟练掌握单链表的存储结构 42、 熟练掌握单链表基本操作的实现 41.2 参考资料 4二 项目介绍 42.1 项目简介 42.2 软件运行环境 4三 需求分析 43.1 总体需求分析 43.2主界面需求分析 4四 总体模块设计 41.操作菜单 52.选择 53.单链表的创建 54.销毁 55.判断表空 56.测量表长 57.插入 58.删除 59.查询元素 510.清空单链表 511.取单
2、链表中指定位置上的元素 512.输出单链表 5五 详细设计 51.主函数 52.菜单函数 63.单链表操作菜单 64.创建单链表函数 65.销毁线性表函数 66.判断表空函数 67.测量表长 68.插入函数 69.删除 710.查询元素函数 711.清空单链表 712.取单链表中指定位置上的元素 713.输出单链表 7六 心得体会 7七 附录(代码) 8单链表的操作一 引言1.1 编写目的1、 熟练掌握单链表的存储结构。2、 熟练掌握单链表基本操作的实现。1.2 参考资料数据结构(C语言版);二 项目介绍2.1 项目简介线性表(linear list)是最常用且最简单的一种数据结构。简言之,一
3、个线性表是n个数据元素的有限序列。至于每个数据元素的具体含义,在不同情况下各不相同,它可以是一个数或一个符号,也可以是一页书,甚至其他更复杂的信息。线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。开发工具Microsoft Visual C+6.02.2 软件运行环境 处理器无要求,32MB以上内存,硬盘1GB以上 Microsoft(R) Windows(R) 系列所有操作系统三 需求分析3.1 总体需求分析1.单链表的创建2.销毁3.判断表空4.测量表长5.插入6.删除7.查询元素8.清空单链表9.取单链表中指定位置上的元
4、素10.输出单链表。3.2主界面需求分析设计菜单界面显示所有操作。四 总体模块设计1. 操作菜单:输出选择界面菜单2. 选择:输入数字选择对应操作功能3. 单链表的创建:建立一个新的单链表4. 销毁:将单链表销毁5. 5.判断表空:判断单链表是否为空6. 测量表长:测量单链表元素的个数7. 插入:在单链表指定位置上插入数据元素8. 删除:删除指定位置上的数据元素9. 查询元素:查询单链表中指定位置上的元素10. 清空单链表:清空单链表中所有的元素11. 取单链表中指定位置上的元素:取单链表中指定位置上的元素,并存入e中12. 12.输出单链表:输出所有单链表中的元素五 详细设计1.主函数功能说
5、明主函数原型void main()输入按键输入输出无返回值无2.菜单函数功能说明主函数原型void Menu()输入按键输入输出无返回值无3.单链表操作菜单功能说明创建单链表原型void Select(LNode *L)输入输入 0-9数字输出无返回值无4.创建单链表函数功能说明创建单链表原型Status CreateList_L(LNode *L, int n)输入无 输出无 返回值单链表首地址5.销毁线性表函数功能说明销毁单链表原型Status DestroyList_L(LNode *L)输入无 输出无 返回值单链表首地址6.判断表空函数功能说明判断表空函数原型Status ListEm
6、pty_L(LNode *L)输入无输出无返回值若L为空表,则返回TRUE,否则返回FALSE7.测量表长功能说明测量表长原型Status ListLength_L(LNode *L)输入无输出 输出L中数据元素个数返回值返回L中数据元素个数8.插入函数功能说明插入函数原型Status ListInsert_L(LNode *L, int i, ElemType e)输入 输入元素位置i输出 输出数据元素的值返回值单链表首地址9.删除功能说明删除原型Status ListDelete_L(LNode *L, int i, ElemType *e)输入删除元素的位置i 输出 输出删除数据元素的值
7、e返回值返回删除的元素值e10.查询元素函数功能说明查询元素函数原型Status QueryList_L(LNode *L, int i)输入 输入查询数据元素值e输出 元素e值返回值单链表首地址11.清空单链表功能说明清空单链表原型Status ClearList_L(LNode *L)输入无输出无 返回值单链表首地址12.取单链表中指定位置上的元素功能说明取单链表中指定位置上的元素原型Status GetElem_L(LNode *L, int i, ElemType *e)输入输入指定的位置i 输出 输出第i个数据元素的值e返回值用e返回L中第i个数据元素的值13.输出单链表功能说明输出
8、单链表原型Status ListTraverse_L(LNode *L输入无输出 输出单链表的所有数据元素返回值无六 心得体会1.这次单链表操作的操作实验是以项目形式,小组成员共同完成的。通过这次实验让我们意识到一个项目必须是一个小组成员共同完成,小组成员的分工明确是完成一个项目的前提,只有明确了分工,我们才能做好相应的模块,最后才能整合到一起。2这次单链表的操作,让我对单链表的操作更加熟悉,明白了单链表的存储方式,知道单链表与顺序表以及其他线性表的不同之处。3.在写代码时,我们要完成了一个功能并测试通过后,才能接着添加功能,不要先一次把所有的功能写进去再测试,这样容易导致一次出现大量错误,我
9、们却无法找到错误并修改。使我们失去信心,认为我们写不出来,从而放弃实验。七 附录(代码)#include#include#include#include#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define Status int#define ElemType inttypedef struct LNode ElemType data; struct LNode * next;LNode, *LinkList;void Menu();/菜单vo
10、id Select(LNode *L);/选择菜单Status CreateList_L(LNode *L, int n);/创建单链表Status DestroyList_L(LNode *L);/销毁单链表Status ListEmpty_L(LNode *L);/判断表空Status ListLength_L(LNode *L);/测量表长Status ListInsert_L(LNode *L, int i, ElemType e);/插入元素Status ListDelete_L(LNode *L, int i, ElemType *e);/删除指定位置上的数据元素Status Qu
11、eryList_L(LNode *L, int i);/查询元素Status ClearList_L(LNode *L);/清空单链表Status GetElem_L(LNode *L, int i, ElemType *e); /取顺序表中指定位置上的元素Status ListTraverse_L(LNode *L);/输出单链表void main() LNode L; L.next = NULL; while (1) Menu(); Select(&L); void Menu() system(color 02); system(cls); printf(n); printf(t n);
12、printf(t n); printf(t *单*链*表*的*操*作*n); printf(t n); printf(t 1: 创建单链表 2: 销毁单链表 n); printf(t n); printf(t 3: 判断表空 4: 测量表长 n); printf(t n); printf(t 5: 插入数据元素 6: 删除数据元素 n); printf(t n); printf(t 7: 查询元素 8: 清空单链表 n); printf(t n); printf(t 9: 取指定位置元素 10: 输出单链表 n); printf(t n); printf(t 0: 退出 n); printf(
13、t n); printf(t B U G n); printf(nntt 请选择操作:);void Select(LNode *L) int a, i,flag = 0; char c; ElemType e; while (1) /输入检测 scanf(%d, &a); getchar(); if (a = 0 & a 0 & i 0 & i 0 & i 0 & i next = NULL; last = L; for (i = n; i 0; -i) p = (LNode *)malloc(sizeof (LNode); printf(请输入数据:); scanf(%d, p); p-ne
14、xt = last-next; last-next = p; last = p; return OK;Status ListTraverse_L(LNode *L) /输出单链表 LNode *p; p = L-next; if (p != NULL) while (p != NULL) printf(%dt, p-data); p = p-next; else printf(没有任何数据!); return OK;Status DestroyList_L(LNode *L) /销毁单链表 if (L-next != NULL) L-next = NULL; else printf(顺序表不存
15、在!); return OK;Status ListEmpty_L(LNode *L) /判断表空 if (L-next != NULL) printf(顺序表不为空!); return FALSE; else printf(顺序表为空!); return TRUE; Status ListLength_L(LNode *L) /测量表长 LNode *p; int i = 0; p = L-next; if (p != NULL) while (p != NULL) i+; p = p-next; printf(单链表共有%d个数据n, i); else printf(没有任何数据!); r
16、eturn i;Status ListInsert_L(LNode *L, int i, ElemType e) /插入元素 LNode *p,*last; int ii; p = L; last = p; while (p != NULL) if (last != NULL) for (ii = 0; ii next; p = p = (LNode *)malloc(sizeof (LNode); p-data = e; p-next = last-next; last-next = p; printf(插入成功!n); break; return OK;Status ListDelete_
17、L(LNode *L, int i, ElemType *e) /删除指定位置上的数据元素 LNode * p, *last; int ii; p = L; last = p; while (p != NULL) if (last != NULL) for (ii = 0; ii next; p = last-next; *e = p-data; last-next = p-next; free(p); printf(删除成功!n); break; return OK;Status QueryList_L(LNode *L, int i) /查询指定位置上的数据元素 LNode * p; in
18、t ii,e; p = L; while (p != NULL) for (ii = 0; ii next; e = p-data; printf(位置 %d 上的数据元素为:%dn,i,e); break; return OK;Status ClearList_L(LNode *L) /清空单链表 LNode *p; p = L-next; free(p); L-next = NULL; printf(清空完毕!n); return OK;Status GetElem_L(LNode *L, int i, ElemType *e) /取顺序表中指定位置上的元素 LNode * p; int ii; p = L; while (p != NULL) for (ii = 0; ii next; *e = p-data; break; return OK;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1