《数据结构》实验指导书 广东工业大学信息工程学院
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》实验指导书
广东工业大学信息工程学院
下面介绍一下数据结构实验环境的启动,教材里的算法使用类C语言描述,具体实现需要支持ANSI C++标准的编译器。考虑到同学们的基础和使用习惯,我们利用Windows环境下的Visual C++来进行实验。
首先启动Visual C++,从开始——程序——Visual C++,启动好Visual C++界面如图1所示:
点击菜单“文件”出现下拉菜单,选择“新建”,如下图:
在上面的界面里,我们选择Win32 Console Application选项,并在工程栏目里输入一个文件名,位置根据自己的保存路径设置即可,确定后回车,出现如下界面:
再点击完成,出现下面的界面:
点击“OK”,出现如下界面:
在上面界面里,我们开始做实验时,只要通过“文件”菜单来添加源文件或头文件进入到程序编辑状态,如下图所示:
点击“OK”后进行程序编辑窗口,如下所示:
这时就可以编辑程序了。实验时将头文件(.h后缀文件)放在header files 里,而源文件(.cpp后缀文件)放在source files里进行编辑调试。
实验一:线性表的存储结构与顺序表的存储实现
实验内容:编写一个程序实现两个有序(从小到大)顺序表合并成为一个顺序表,合并后的结果放在第一个顺序表中。
实验目的:了解并掌握线性表的逻辑结构特性,通过实验掌握顺序存储结构的描述方法及用高级语言进行编程实现的方法。
实验步骤:
1.定义顺序表类型和结构:
首先要想好自己定义的顺序表叫什么名称,顺序表结构里包括有什么项目,每一项该是什么类型,如:
typedefstruct{
ElemType *elem;
int length;
intlistsize;
} SqList;
2.将定义好的顺序表初始化,如:
Status InitList_Sq(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;
}
3.创建顺序表,如:
void Create_Sq(SqList&L){ //创建顺序表
inti,n;
printf("创建一个有序表:\n");
printf("输入有序表中元素的个数:");
scanf("%d",&n);
L.length=n;
for(i=0;i printf("输入第%d个元素的值:",i+1); scanf("%d",&L.elem[i]); printf("\n"); } } 4.编写顺序表的元素输出函数 voidDisp_Sq(SqList L){ inti,n; n=L.length; for(i=0;i printf("%5d",L.elem[i]); printf("\n"); } 5.编写合并程序,实现题目要求的合并功能 void Combine(SqList&La, SqList&Lb) { //把两个有序表合为一个函数体请同学们自己编 } 实验二:栈和队列的应用 一、实验目的 熟练掌握栈结构及其应用 二、实验内容 利用栈结构具有先进后出的特性,编程实现:输入一个任意十进制数,转换八进制数进行输出。 1、定义栈结构,如: #define stack_size 100 #define stackincrement 10 typedefstruct{ int *base; int *top; intstacksize; }SqStack; 2.设计基本算法 1)对栈进行初始化: Status InitStack (SqStack&S) { //构造一个空栈 S.base = (Selemtype *)malloc(stack_size * sizeof(ElemType)); if (!S.base) exit (OVERFLOW); S.top = S.base; S.stacksize = stack_size; return OK; }//InitStack 2) 返回栈顶函数: Status GetTop(SqStackS,Selemtype&e){ //若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR if (S.top ==S.base) return ERROR; e = *(S.top-1); return OK; }// GetTop 3)入栈函数 Status Push (SqStack&S,Selemtype e) { //插入元素e为新的栈顶元素 if (S.top - S.base>=S.stacksize){//栈满,追加存储空间 S.base = (ElemType*)realloc (S.base, (S.stacksize + stackincrement) * sizeof (ElemType)); if (!S.base) exit (OVERFLOW);//存储分配失败 S.top = S.base+S.stacksize; S.stacksize +=stackincrement; } *S.top++=e; return OK; }//Push 4)栈空处理函数 Status StackEmpty(SqStack&S){ if (S.base == S.top) return OK; else return ERROR; } // StackEmpty 5)出栈函数 Status Pop(SqStack&S,Selemtype&e){ //若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK //,否则返回ERROR if (S.top==S.base) return ERROR; e=*--S.top; return OK; }//Pop 6)设计数制转换算法,编写转换函数conversion(). void conversion(structSqStack&S) {