数据结构实验报告精要.doc

数据结构实验报告精要

数据结构实验报告( 一 ) 提交日期: 班级 姓 名 学号 上机号 67 实验名称 线性表 测试数据与运行记录 线性表是最简单的线性结构。线性表的主要操作特点是可以在任意位置插入和删除一个数据元素。 线性表的顺序存储结构 线性表的顺序存储结构的本质是:在逻辑上相邻的两个数据元素ai-1, ai,在存储地址中也是相邻的,既地址连续。我们采用的是含‘静态’一维数组和线性表长的结构体。 测试数据与运行记录如下: 步骤一,建立线性表。 输入 “1”。回车键入,得到“n=?”输入的n即为线性表所要存储的元素长度,由于建立线性表时已规定MAXSIZE=20,因此所输入的n应该小于等于20。此处实验输入n=6。然后,将想要插入的数据元素分别输入数据域data 0到data5。 回车键入,程序得出一段由6个数据元素组成的如下图所示的线性链表。 链表数据为:1,2,3,4,5,6。 测试数据与运行记录 步骤二,插入数据元素 选择 “2”。回车键入,得到“i,e=?”即输入想在位置i插入的数据元素e。本次测试中分别输入3和6。 回车,程序运行得到如下图所展示的一个插入新元素的新链表,即在原数据链表中第3个数据元素所在位置插入新的数据元素“6”,原数据表中的第3个元素及以后的元素序号+1,同时,新链表的长度+1。 因此本实验中新的到的数据链表长度为6+1=7,新链表中数据为:1,2,6,3,4,5,6。 步骤三,删除数据元素 选择 “3”。回车键入,得到“i=?”,即键入想删除的第i个元素,返回该元素的值,使i+1及以后的数据元素的序号-1,同时,数据链表的长度-1。 因此本实验中将步骤二中建立的数据链表第3个元素删除,删除后数据链表长度为7-1=6,得到的数据链表中的数据为:1,2,3,4,5,6。 步骤四,查找元素 选择 “4”。回车键入,得到“e=?”即在步骤三中新生成的数据链表中查找值为e的元素在链表所处的位置。 因此本实验中输入e=“4”,程序运行结果为“已找到,元素位置是4”。 另外输入数据链表中未存储的数据“10”,程序运行结果为“未找到 -1”,说明程序运行无误。 测试数据与运行记录 最后,程序运行完毕,回车退出。 线性表的链式存储结构 线性表链式存储的操作同样包括几个方面:线性表的建立、元素的插入、删除、查询等。其本质是:在逻辑上相邻的两个数据元素ai-1, ai,在存储地址中可以不相邻,既地址不连续。根据指针域的不同和结点的构造链的方式不同,链表主要有单链表、单循环链表和双向循环链表。其中,单链表是最经常使用的链表。 步骤一,建线性链表 选择 “1”。输入元素组成一个链表。链表的建立与顺序表不同,它是一种动态结构。建立线性表的链式存储结构的过程就是一个动态生成链表的过程。因此每输入一个元素即重新分配新的结点,本次实验输入元素为:5,1,2,3,4,5,6,7。 步骤二,插入元素 链表和顺序表的插入运算不同,顺序表在插入时要移动大量的结点,而链表在插入时不需要移动结点,但需要移动指针来进行位置的查找。先使p指向ai-1,然后生成一个数据域值为x的新结点*s,再进行插入操作。 步骤三,删除第i个元素 选择 “3”,回车键入,输入想要删掉的第“i”个元素 步骤四,查找元素 最后,程序运行完毕,回车退出。 根据本部分实验总结的程序流程 一、线性表的顺序结构存储 (1) 创建顺序表create_list L并输出表out_list L (注:本程序中未进行顺序表的初始化InitList L,其效果与create_list L的效果一样,对实验无影响。) /* 建立线性表 */ void creat_list(SqList *L) { int i; printf(\n n=?); scanf(%d,L-length); for(i=0;iL-length;i++){ printf(\n data %d=?,i); scanf(%d,(L-a[i])); } } /* creat_list */ 【说明】由于函数中要改变参数L的一维数组[MAXSIZE]的值,因此参数L应设计为输出型参数,即L设计为SqList的指针类型,否则,一维数组子域的修改值将不能带回去。 (2) 插入数据元素 insert_sq void insert_sq(SqList *L,int i,ElemType e) { int j; if (L-length==MAXSIZE) printf(\n overflow !); else if(i1||iL-l

文档评论(0)

1亿VIP精品文档

相关文档