您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 实训报告模板顺序线性表动态分配存储的
1实训一顺序线性表动态分配存储的实现班级:05通信工程姓名:XXX学号:88888888日期:2006-9-19一、实训目的1、会定义线性表的顺序存储结构。2、熟悉c++程序的基本结构,掌握程序中的用户头文件、实现文件和主文件之间的相互关系及各自的作用。3、熟悉线性表的一些基本操作和具体的函数定义。4、熟悉c++操作环境的使用以及多文件程序的输入、编辑、调试和运行的全过程。二、实训要求1、认真阅读和掌握本实验内容;2、上机运行;3、保存和打印出程序运行结果,并结合程序进行分析;4、按照你对线性表操作的需要,重新改写主文件并运行,并打印运行结果。三、实训内容该程序的功能是对元素类型为student结构类型的顺序存储的线性表进行一些操作,该程序包含三个文件,两个头文件,一个主文件,其中:predef.h:预定义头文件,包括函数结果的状态码;sqlist.h:顺序表的动态分配的存储实现头文件,包括顺序表动态分配的类型定义,顺序表的初始化、插入、删除、查找等函数的实现;test.cpp:测试用的主程序,包括元素类型为student结构类型的定义及利用菜单实现班级课程的管理(插入、删除、遍历、查询)等的实现代码。四、测试结果实训题目:4号、黑体、加粗、居中、段后行距0.5班级、姓名、学号、日期:黑体、5号;内容楷体实训目的等:黑体、4号空1行空1行2五、程序清单//文件名:predef.h//函数结果状态代码#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineINFEASIBLE-1#defineOVERFLOW-2//Status是函数的类型,其值是函数结果状态代码typedefintStatus;//文件名Sqlist.h//线性表动态分配存储实现#includepredef.h#includemalloc.h#defineLIST_INIT_SIZE100//线性表分配存储空间分配的初始量#defineLISTINCREMENT10//线性表分配存储空间分配增量typedefstruct{ElemType*elem;//存储空间基指针intlength;//线性表长度intlistsize;//当前分配单元数(以sizeof(ElemType)为单位)}SqList;文件名说明注释:黑体,5号正文内容:宋体、5号3StatusInitList_Sq(SqList&L){//构造成一个空的线性表LL.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L.elem)exit(OVERFLOW);//存储分配失败L.length=0;L.listsize=LIST_INIT_SIZE;returnOK;}//InitList_SqStatusListInsert_Sq(SqList&L,inti,ElemTypee){//在顺序线性表L中//第i个位置之前插入一个新元素e,//i的合法值范围为[1,L.length+1]if(i1||iL.length+1)returnERROR;if(L.length=L.listsize){//当前存储空间已满,增加分配ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));if(!newbase)exit(OVERFLOW);//存储分配失败L.elem=newbase;//修改新基址L.listsize+=LISTINCREMENT;//修改当前分配单元数}ElemType*q=L.elem+i-1;//q为插入位置for(ElemType*p=L.elem+L.length-1;p=q;p--)*(p+1)=*p;//插入位置及之后的元素右移*q=e;//插入++L.length;//表长增1returnOK;}//ListInsert_SqStatusListDelete_Sq(SqList&L,inti,ElemType&e){//在顺序线性表L中删除第i个元素,并用e返回其值//i的合法值范围为[1,ListLength_Sq(L)]if(i1||i(L.length))returnERROR;ElemType*p=L.elem+i-1;//p为被删除元素的位置e=*p;//被删除元素的值赋给eElemType*q=L.elem+L.length-1;//q为表尾元素的位置for(++p;p=q;p++)*(p-1)=*p;//被删除位置之后的元素左移--L.length;//表长减1returnOK;}//ListDelete_Sq4//主程序test.cpptypedefstruct{charname[20];floatgrade;}ElemType;#includestdio.h#includeconio.h#includestring.h#includeSqlist.hvoidSqListTraverse(SqList&L);//顺序线性表的遍历voidmain(){intflag=1;SqListL;charch;char*str_tem;floatgrad_tem;ElemTypeee,v;intloc,temp;//---------------------------程序解说--------------------------printf(本程序用来实现顺序结构的线性表。\n);printf(可以实现查找、插入、删除等操作。\n);//-------------------------------------------------------------InitList_Sq(L);//初始化线性表Lwhile(flag){printf(请选择:\n);printf(1.显示所有元素\n);printf(2.插入一个元素\n);printf(3.删除一个元素\n);printf(4.查找一个元素\n);printf(5.退出程序\n);scanf(%c,&ch);switch(ch){case'1':SqListTraverse(L);break;//显示所有元素case'2':5{printf(请输入要插入的元素和插入位置:\n);printf(格式:姓名成绩位置;例如:zhuoym89.52\n);//输入要插入的元素和插入的位置scanf(%s,str_tem);scanf(%f,&grad_tem);scanf(%d,&loc);strcpy(ee.name,str_tem);ee.grade=grad_tem;temp=ListInsert_Sq(L,loc,ee);//插入if(!temp)printf(插入失败!\n);//插入失败else{printf(插入成功!\n);SqListTraverse(L);printf(\n);}//插入成功break;}case'3':{printf(请输入要删除元素的位置:);scanf(%d,&loc);//输入要删除的元素的位置temp=ListDelete_Sq(L,loc,v);//删除if(temp)printf(删除了一个元素:%s\n,v.name);//删除成功elseprintf(该元素不存在!\n);//删除失败SqListTraverse(L);printf(\n);break;}/*case'4':{//同学们自己完成}*/default:flag=0;printf(程序结束,按任意键退出!\n);}getch();}}voidSqListTraverse(SqList&L){//顺序线性表的遍历if(L.elem){//如果线性表非空6for(inti=1;i=L.length;i++)printf(%s\t%-5.2f\n,L.elem[i-1].name,L.elem[i-1].grade);}}//SqListTraverse
本文标题:实训报告模板顺序线性表动态分配存储的
链接地址:https://www.777doc.com/doc-2499890 .html