华南农业大学数据结构上机实验指导书及答案(137页).doc
《华南农业大学数据结构上机实验指导书及答案(137页).doc》由会员分享,可在线阅读,更多相关《华南农业大学数据结构上机实验指导书及答案(137页).doc(137页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-华南农业大学数据结构上机实验指导书及答案-第 134 页目 录实验一 线性表2(一) 实验目的2(二) 实验内容2(三) 实验报告10实验二 堆栈11(一) 实验目的11(二) 实验内容11(三) 实验报告18实验三 队列19(一) 实验目的19(二) 实验内容19(三) 实验报告22实验四 模式匹配23(一) 实验目的23(二) 实验内容23(三) 实验报告26实验五 二叉树27(一) 实验目的27(二) 实验内容27(三) 实验报告34实验六 查找35(一) 实验目的35(二) 实验内容35(三) 实验报告39实验七 内部排序40(一) 实验目的40(二) 实验内容40(三) 实验报告4
2、1实验八 图和图的遍历42(一) 实验目的42(二) 实验内容42(三) 实验报告48数据结构课程设计(2007级用,仅做参考)49(一) 数据结构课程设计安排49(二) 图算法实验题目49(三) 团队题目(各种排序算法效率分析)49数据结构模拟试卷一53数据结构模拟试卷二56附录1:实验报告及习题59实验名称:线性表(一)59实验名称:堆栈(二)61实验名称:队列(三)63实验名称:模式匹配(四)66实验名称:二叉树(五)68实验名称:查找(六)70实验名称:内部排序(七)72实验名称:图和图的遍历(八)76设计性、综合性实验78附录2 数据结构课程设计完成情况登记表79附录3 图的应用80
3、实验一 线性表(一) 实验目的(1) 掌握线性表的顺序存储(2) 掌握线性表的链式存储(3) 掌握基本算法(建表、插入、删除)的实现(二) 实验内容1. 线性表的顺序存储:掌握线性表的顺序存储结构及其基本操作、合并、逆置等算法设顺序表的存储结构定义如下:(同学们可扩展考虑其他形式的存储结构定义)#define LIST_INIT_SIZE 100 / 线性表存储空间的初始分配量#define LISTINCREMENT 10 / 线性表存储空间的分配增量typedef structint *elem; / 存储空间基址 int length; / 当前长度 int listsize; / 当前
4、分配的存储容量(以sizeof(int)为单位)SqList;题目1:编写算法,创建初始化容量为LIST_INIT_SIZE的顺序表T,并实现插入、删除、遍历操作。本题目给出部分代码,请补全内容。#include#include#define OK 1 #define ERROR 0#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define ElemType inttypedef structint *elem;int length;int listsize;SqList;int InitList_Sq(SqList &L)/ 算法2.3
5、,构造一个空的线性表L,该线性表预定义大小为LIST_INIT_SIZE/ 请补全代码int Load_Sq(SqList &L)/ 输出顺序表中的所有元素int i;if( ) printf(The List is empty!); / 请填空elseprintf(The List is: );for( ) printf(%d , ); / 请填空printf(n);return OK;int ListInsert_Sq(SqList &L,int i,int e)/ 算法2.4,在顺序线性表L中第i个位置之前插入新的元素e/ i的合法值为1iL.length +1/ 请补全代码int Li
6、stDelete_Sq(SqList &L,int i, int &e)/ 算法2.5,在顺序线性表L中删除第i个位置的元素,并用e返回其值/ i的合法值为1iL.length/ 请补全代码int main()SqList T;int a, i;ElemType e, x;if( ) / 判断顺序表是否创建成功,请填空printf(A Sequence List Has Created.n);while(1)printf(1:Insert elementn2:Delete elementn3:Load all elementsn0:ExitnPlease choose:n);scanf(%d,
7、&a);switch(a)case 1: scanf(%d%d,&i,&x);if( ) printf(Insert Error!n); / 判断i值是否合法,请填空else printf(The Element %d is Successfully Inserted!n, x); break;case 2: scanf(%d,&i);if( ) printf(Delete Error!n); / 判断i值是否合法,请填空else printf(The Element %d is Successfully Deleted!n, e);break;case 3: Load_Sq(T);break
8、;case 0: return 1;测试样例格式说明:根据菜单操作:1、输入1,表示要实现插入操作,紧跟着要输入插入的位置和元素,用空格分开2、输入2,表示要实现删除操作,紧跟着要输入删除的位置3、输入3,表示要输出顺序表的所有元素4、输入0,表示程序结束完整代码:#include#include#define OK 1#define ERROR 0#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define ElemType inttypedef structint *elem,length,listsize;SqList;int Ini
9、tList_Sq(SqList &L)L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType);L.length=0;L.listsize=LIST_INIT_SIZE;return OK;int Load_Sq(SqList &L)int i;if(L.length=0)printf(The List is empty!);elseprintf(The List is:);for(i=0;iL.length;i+)printf(% d,L.elemi);printf(n);return OK;int ListInsert_Sq(SqLi
10、st &L,int i,int e)if(iL.length+1)return ERROR;ElemType *newbase,*q,*p;if(L.length=L.listsize)newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType);L.elem=newbase;L.listsize+=LISTINCREMENT;q=&(L.elemi-1);for(p=&(L.elemL.length-1);p=q;-p)*(p+1)=*p;*q=e;+L.length;return OK;int L
11、istDelete_Sq(SqList &L,int i,int &e)ElemType *q,*p;if(iL.length)return ERROR;p=&(L.elemi-1);e=*p;q=L.elem+L.length-1;for(+p;p=q;p+)*(p-1)=*p;L.length-;return OK;int main()SqList T;int a,i;ElemType e,x;if(InitList_Sq(T)printf(A Sequence List Has Created.n);while(1)printf(1:Insert elementn2:Delete ele
12、mentn3:Load all elementsn0:ExitnPlease choose:n);scanf(%d,&a);switch(a)case 1: scanf(%d%d,&i,&x);if(!ListInsert_Sq(T,i,x)printf(Insert Error!n);else printf(The Element %d is Successfully Inserted!n,x);break;case 2: scanf(%d,&i);if(!ListDelete_Sq(T,i,e)printf(Delete Error!n);elseprintf(The Element %d
13、 is Successfully Deleted!n,e);break;case 3: Load_Sq(T);break;case 0: return 1; 题目2:编写算法,将两个非递减有序顺序表A和B合并成一个新的非递减有序顺序表C。本题不提供代码,请同学们独立完成,所需子函数参考前面题目1完成的内容。测试样例格式说明:键盘输入第一行:顺序表A的元素个数第二行:顺序表A的各元素(非递减),用空格分开第三行:顺序表B的元素个数第四行:顺序表B的各元素(非递减),用空格分开正确输出第一行:顺序表A的元素列表第二行:顺序表B的元素列表第三行:合并后顺序表C的元素列表测试样例: 第一组自测数据 键
14、盘输入51 3 5 7 952 4 6 8 10 正确输出List A:1 3 5 7 9 List B:2 4 6 8 10 List C:1 2 3 4 5 6 7 8 9 10 第二组自测数据键盘输入612 24 45 62 84 96415 31 75 86正确输出List A:12 24 45 62 84 96 List B:15 31 75 86 List C:12 15 24 31 45 62 75 84 86 96 完整代码:#include#include#define OK 1#define ERROR 0#define LIST_INIT_SIZE 100#define
15、LISTINCREMENT 10#define ElemType inttypedef structint *elem,length,listsize;SqList;int InitList_Sq(SqList &L)L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType);L.length=0;L.listsize=LIST_INIT_SIZE;return OK;int Load_Sq(SqList &L)int i;for(i=0;iL.length;i+)printf(%d ,L.elemi);printf(n);return O
16、K;int ListLength(SqList L)return L.length;int GetElem(SqList L,int i,ElemType &e)e=L.elemi-1;return OK;int ListInsert_Sq(SqList &L,int i,int e)if(iL.length+1)return ERROR;ElemType *p,*q,*newbase;if(L.listsize=q;p-)*(p+1)=*p;*q=e;L.length+;return OK;void MergeList(SqList La,SqList Lb,SqList &Lc)int i
17、,j,k,La_len,Lb_len,ai,bj;i=j=1;k=0;InitList_Sq(Lc);La_len=ListLength(La);Lb_len=ListLength(Lb);while(i=La_len)&(j=Lb_len)GetElem(La,i,ai);GetElem(Lb,j,bj);if(ai=bj)ListInsert_Sq(Lc,+k,ai);i+;elseListInsert_Sq(Lc,+k,bj);j+;while(i=La_len)GetElem(La,i+,ai);ListInsert_Sq(Lc,+k,ai);while(j=Lb_len)GetEle
18、m(Lb,j+,bj);ListInsert_Sq(Lc,+k,bj);Load_Sq(Lc);int main()int an,bn,i,e;SqList La,Lb,Lc;InitList_Sq(La);scanf(%d,&an);for(i=1;i=an;i+)scanf(%d,&e);ListInsert_Sq(La,i,e);printf(List A:);Load_Sq(La);InitList_Sq(Lb);scanf(%d,&bn);for(i=1;i=an;i+)scanf(%d,&e);ListInsert_Sq(Lb,i,e);printf(List B:);Load_S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华南 农业大学 数据结构 上机 实验 指导书 答案 137
限制150内