1、数据结构实验报告册四川师范大学计算机学院实 验 报 告 册院系名称: 计算机科学学院 课程名称: 数据结构 实验学期 2013 年至 2014 年 第 一 学期专业班级: 2012级4班软件工程 姓名: 张勇 学号: 2012110457 指导教师: 廖雪花 实验最终成绩: 实验报告须知1学生填写实验报告应按规范填写,填写格式见由任课老师给出的实验报告样本;2学生应填写的内容包括:封面相关栏目、第一页中本学期(年)开设实验课程情况一览表中的实验名称、学时数;每次报告中的实验性质、同组人姓名、实验日期、以及实验报告中的一至五项;3教师填写内容为:实验评价、每次报告成绩、第一页中本学期(年)开设实
2、验课程情况一览表中成绩、及封面的实验最终成绩;4学生实验结束后,教师应对学生实验结果进行核实,学生方可离开实验室。5、实验成绩等级分为(90100分)优,(8089分)良,(70-79分)中,(6069分)及格,(59分)不及格。6本实验册应妥善保管,本课程实验结束后应交回实验室。 本学期(年)开设实验课程情况一览表序号实验名称(学生实验后填写)学时数成绩(分数或等级)1抽象数据类型的表示与实现2线性表实验3栈和队列实验4稀疏矩阵实验5树和二叉树实验6图及其应用实验7查找和排序实验891011121314151617181920实验报告(1)实验名称抽象数据类型的表示与实现同组人姓名张勇实验性
3、质 基本操作 验证性 综合性 设计性实验日期8月30日实验成绩教师评价:实验预习 实验操作 实验结果 实验报告 其它 教师签名:一、实验目的及要求1) 熟悉类C语言的描述方法,学会将类C语言描述的算法转换为C源程序实现;2) 理解抽象数据类型的定义,编写完整的程序实现一个抽象数据类型(如三元组)。3) 认真阅读和掌握本实验的参考程序,上机运行程序,保存和打印出程序的运行结果,并结合程序进行分析。二、实验内容1)编程实现抽象数据类型三元组的定义、存储、基本操作(最大值、最小值、平均值等的求解),并设计一个主菜单完成各个功能的调用。三、主要设备及软件PC机1台, VC 6.0 平台4、实验流程、操
4、作步骤或核心代码、算法片段说明:这个实验的代码全部写到一个CPP文件中的#include#includeusing namespace std;#define TURE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int ElemType;typedef ElemType *Triplet;Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3)
5、 T = (ElemType *)malloc(3 * sizeof(ElemType); if(!T) exit(OVERFLOW); T0 = v1; T1 = v2; T2 = v3; return OK;Status DestroyTriplet(Triplet &T) free(T); T = NULL; return OK;Status Get(Triplet T,int i,ElemType &e) if(i3) return ERROR; e = Ti - 1; return OK;Status Put(Triplet &T, int i,ElemType e) if(i3)
6、return ERROR; Ti -1 = e; return OK;Status IsAscending(Triplet T) if(T0 T1) | (T1 T1) | (T1 T2) return 1; else return 0;Status Max(Triplet T,ElemType &e) if(T0 = T1) if(T0 = T2) e = T0; else e = T2; else if(T1 = T2) e = T1; else e = T2; return OK;Status Min(Triplet T,ElemType &e) if(T0 = T1) if(T0 =
7、T2) e = T0; else e = T2; else if(T1 = T2) e = T1; else e = T2; return OK;int Select(Triplet &T) int option; int i; ElemType e; cout endl; cout 1.销毁三元组 endl; cout 2.查找元素 endl; cout 3.改变元素 endl; cout 4.判断是否升序排列 endl; cout 5.判断是否降序排列 endl; cout 6.显示最大值 endl; cout 7.显示最小值 endl; cout 8.安全退出 endl; cout en
8、dl; coutoption; switch(option) case 1: DestroyTriplet(T); break; case 2: couti; Get(T,i,e); cout第i个数的值为eendl; break; case 3: couti; cout你需要将第ie; Put(T,i,e); break; case 4: if(IsAscending(T) = 1) cout该三元组为升序排列.endl; else cout该三元组不是升序排列.endl; break; case 5: if(IsDescending(T) = 1) cout该三元组为降序排列.endl;
9、else cout该三元组不是降序排列.endl; break; case 6: Max(T,e); cout最大值为eendl; break; case 7: Min(T,e); cout最小值为eendl; break; case 8: exit(0); default: cout输入的选项有误,请重新输入.endl; break; getchar(); getchar(); system(cls); return Select(T);int main() Triplet T; int v1,v2,v3; coutv1v2v3; system(cls); InitTriplet(T,v1,
10、v2,v3); Select(T); return 0; 五、实验结果的分析与评价这个实验让我第一次接触到了抽象数据类型,感觉十分震撼,学到了很多。实验报告(2)实验名称线性表实验同组人姓名张勇实验性质 基本操作 验证性 综合性 设计性实验日期8月30日实验成绩教师评价:实验预习 实验操作 实验结果 实验报告 其它 教师签名:一、实验目的及要求1) 熟悉线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现;2)以线性表的各种操作(建立、插入、删除等)的实现为重点;3)通过本次实习帮助学生加深对高级语言C语言的使用(特别是函数参数、指针类型、链表的使用)。2) 认真阅读和掌握本实验的参考
11、程序,上机运行本程序, 保存和打印出程序的运行结果,并结合程序进行分析。按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果。2、实验内容1) 编程实现线性表两种存储结构中的基本操作的实现(线性表的创建、插入、删除和查找),并设计一个主菜单完成各个功能的调用。三、主要设备及软件PC机1台, VC 6.0 平台四、实验流程、操作步骤或核心代码、算法片段 /declar.h/#ifndef ABC_D#define ABC_D#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1
12、#define OVERFLOW -2#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef int ElemType;typedef int Status;typedef struct ElemType *elem; int length; int listsize;SqList;static Status InitList(SqList &L);static Status DestroyList(SqList &L);static Status ClearList(SqList &L);static Status ListEmpt
13、y(SqList L);static Status ListLength(SqList L);static Status GetElem(SqList L,ElemType i,ElemType &e);/Status LocateElem(SqList L,ElemType e,compare();static Status PriorElem(SqList L,ElemType cur_e,ElemType &pre_e);static Status NextElem(SqList L,ElemType cur_e,ElemType &next_e);static Status ListI
14、nsert(SqList &L,ElemType i,ElemType e);static Status ListDelete(SqList &L,ElemType i,ElemType &e);/Status ListTraverse(SqList L,visit()#endif/function.cpp/#includedeclar.h#include#include#includeusing namespace std;static int option;static ElemType i,e;static ElemType cur_e,pre_e,next_e;static SqLis
15、t L;Status InitList(SqList &L) L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType); if(! L.elem) exit(OVERFLOW); L.length = 0; L.listsize = LIST_INIT_SIZE; return OK;Status DestroyList(SqList &L) if(! L.elem)exit(OVERFLOW); free(L.elem); L.length = L.listsize = 0; return OK;Status ClearLis
16、t(SqList &L) if(! L.elem)exit(OVERFLOW); L.length = 0; return OK;Status ListEmpty(SqList L) if(! L.elem)exit(OVERFLOW); if(L.length = 0) return TRUE; else return FALSE;Status ListLength(SqList L) if(! L.elem)exit(OVERFLOW); return L.length;Status GetElem(SqList L,ElemType i,ElemType &e) if(! L.elem)
17、exit(OVERFLOW); if(iL.length) return ERROR; e = L.elemi - 1; return OK;/*Status LocateElem(SqList L,ElemType e,compare()*/Status PriorElem(SqList L,ElemType cur_e,ElemType &pre_e) if(! L.elem)exit(OVERFLOW); for(int ix = 1;ix L.length;+ix) if(cur_e = L.elemix) pre_e = L.elemix - 1; return OK; return
18、 FALSE;Status NextElem(SqList L,ElemType cur_e,ElemType &next_e) if(! L.elem)exit(OVERFLOW); for(int ix = 0;ix L.length - 1;+ix) if(cur_e = L.elemix) next_e = L.elemix + 1; return OK; return FALSE;Status ListInsert(SqList &L,ElemType i,ElemType e) if(! L.elem)exit(OVERFLOW); if(i L.length + 1) retur
19、n ERROR; if(L.length = L.listsize) ElemType *newbase; newbase = (ElemType *)realloc(L.elem,(L.listsize + LISTINCREMENT) * sizeof(ElemType); if(! newbase) exit(OVERFLOW); L.elem = newbase; L.listsize += LISTINCREMENT; for(int ix = L.length + 1;ix i;-i) L.elemix = L.elemix - 1; L.elemi = e; +L.length;
20、 return OK;Status ListDelete(SqList &L,ElemType i,ElemType &e) if(! L.elem)exit(OVERFLOW); if(i L.length) return ERROR; e = L.elemi - 1; for(int ix = i - 1;ix L.length;+ix) L.elemix =L.elemix + 1; -L.length; return OK;static int Interface() coutendl; cout 线性表 endl; coutendl; cout endl; cout 0.建立线性表
21、endl; cout 1.销毁线性表 endl; cout 2.将线性表置空 endl; cout 3.判断线性表是否为空 endl; cout 4.查找制定位置元素的值 endl; cout pare判定线性表 endl; cout 6.查找输入数据的前驱 endl; cout 7.查找输入数据的后继 endl; cout 8.指定位置插入数据元素 endl; cout 9.制定位置删除数据元素 endl; cout 10.visit判定线性表 endl; cout 11.安全退出程序 endl; cout endl; coutendl; coutoption; if(option = 0)
22、 InitList(L); switch(option) case 1: DestroyList(L); break; case 2: ClearList(L); break; case 3: ListEmpty(L); break; case 4: couti; GetElem(L,i,e); cout第i个数据的值为: eendl; case 5: case 6: coutcur_e; PriorElem(L,cur_e,pre_e); coutcur_e的前驱为: pre_eendl; break; case 7: coutcur_e; NextElem(L,cur_e,next_e);
23、 coutcur_e的前驱为: next_eendl; break; case 8: couti; coute; if(ListInsert(L,i,e) = OK) cout插入数据元素成功!endl; cout按回车键返回.; break; case 9: couti; if(ListDelete(L,i,e) = OK) cout已经将i位置的e元素成功删除!endl; cout按回车键返回.; break; case 10:; getchar(); system(cls); return OptionMenu();/the_main.cpp/#includefunction.cppin
24、t main() OptionMenu(); return 0;五、实验结果的分析与评价实验报告(3)实验名称抽象数据类型的表示与实现同组人姓名栈、队列实验实验性质 基本操作 验证性 综合性 设计性实验日期8月30日实验成绩教师评价:实验预习 实验操作 实验结果 实验报告 其它 教师签名:一、实验目的及要求1) 掌握栈和队列这两种特殊的线性表,熟悉它们的特性,在实际问题背景下灵活运用它们。2) 本实验训练的要点是“栈”和“队列”的观点;二、实验内容1) 利用栈,实现任一个表达式中的语法检查(如括号的匹配)。2) 编程实现队列在两种存储结构中的基本操作(队列的初始化、判队列空、入队列、出队列);三、主要设备及软件PC机1台, VC
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1