数据结构实验报告 线性表的顺序表示和实现.docx
沙理工数学与计算科学学院实验报告实验项目名称:线性表的顺序表示和实现所属课程名称:数据结构A实验类型:验证性实验日期 :2012年4月5号班级:信管10-02班学号:201044070218姓名:张松涛成绩:附录2:实验报告填写说明1 .实验项目名称:要求与实验教学大纲一致。2 .实验目的:目的要明确,要抓住重点,符合实验教学大纲要求。3 .实验原理:简要说明本实验项目所涉及的理论知识。4 .实验环境:实验用的软、硬件环境。5 .实验方案(思路、步骤和方法等):这是实验报告极其重要的内容。概括整个实验过程。对于验证性实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几 个步骤来实现其操作。对于设计性和综合性实验,在上述内容基础上还应该画出流程图、 设计思路和设计方法,再配以相应的文字说明。对于创新性实验,还应注明其创新点、 特色。6 .实验过程(实验中涉及的记录、数据、分析):写明具体实验方案的具体实施步骤,包括实验过程中的记录、数据和相应的分析。7 .实验结论(结果):根据实验过程中得到的结果,做出结论。8 .实验小结:本次实验心得体会、思考和建议。9.指导教师评语及成绩:指导教师依据学生的实际报告内容,给出本次实验报告的评价。【实验目的】(1)、线性表的逻辑结构特征。、总存在第一个和最后一个元素。、除第一个元素以外,每一个元素总存在唯一一个直接前驱元素。、除最后一个元素以外,每一个元素总存在唯一一个直接后驱元素。(2)、顺序表的特征。、逻辑关系上相邻的物理位置上也相邻。、是一种随机存储结构,可以用一个简单直观的公式来表示每一个元素的地址。(3)学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基 本操作和具体的函数定义。掌握顺序表的基本操作,实现顺序表的插入、删除、查找 以及求并集等运算。【实验原理】/线性表的动态分配顺序存储结构ttdefine LIST INIT SIZE5 线性表存储空间的初始分配量ttdefine LISTINCREMENT2 /线性表存储空间的分配增量Typedef struct ElemType *elem;存储空间基址intlength;/当前长度int listsize;当前分配的存储容量(以sizeof (ElemType)为单位) SqList;【实验环境】实验的环境:VC+二、实验内容:【实验方案】编写主函数,调用初始化,建立顺序表的算法以及插入和删除算法。调试运行输入数据得出结果并进行分析。【实验过程】(实验步骤、记录、数据、分析)include <stdio .h> ttinclude <stdlib.h> ttdefine TRUE 1 KdeFine FALSE 0 ttdefine OK 1 ttdefine ERROR Q ttdefine INFEASIBLE -1 typedef int Status; typedef int ElenType;ttdefine LIST_INIT_SIZE 5线性表存储空间的初始分配量 ttdefine LISTINCREMENT 10 typedef struct< ElenType *elen; int length; int listsize;>SqList;Status InitList_Sq(SqList &L)<L.elen=(ElenType *)nalloc(LIST_INIT_SIZE*sizeof(ElenType); if(?L.elem) exit(OUERFLOW);L.length-O;L.listsize=LIST_INIT_SIZE; return OK;/ InitList_Sq ElenTppe »newbase,*p,«q; Status ListInsert_Sq(SqList &L,int i.ElenType e)< i / i /,I I I1 onnf-h-*-l % of-unn POPAD -Status ListInsert_Sq(SqList &L tint i.ElenType e)|iF(i<1 | i>L.length+1) return ERROR;if(L.length>=L.listsize)<nevjbase-(ElenType »)realloc (L .elen, (L .listsizeL I ST INCREMENT )»sizeoF(ElenType); if(?newbase)exit(OUERFLOW);L.elen=newbase;L.listsize+=LISTINCREMENT;>q=fc(L.elemi-1);For(p=&(L.elenL.length-1);p>=q;p)*(p+1)=*p;*q=e; L .length;return OK;>/ListInsert_SqStatus ListDelete_Sq(SqList &L,int i,ElemType &e)if(i<1) | (i>L.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;>/ListDelete_Squoid main()<SqList L;,i nt- S -int i;InitList_Sq(L);For(i=0;i<»L.listsize;i*+)< scanF("%d",6L.eleni);L.length+;>For(i"O;i<L.length;i*) printFCd " ,L .eleni);printf("n");ElemType e; scanF("%d%d",&i,&e);ListInsert_Sq(L,i,e);for(i=0;i<L.length;i+) printf("%d ",*(L.elem*i);printfCXn");ListDelete_Sq(L,i,e);For(i=0;i<L.length;i*+) printf("%d ",*(L.elera*i);printfCXn");将源程序输入VC6.0Configuration: 1 - Win32 DebugCompiling.I.cpp|c:documents and settingsadninistrat:or1 ,cpp(仙):error C2065: 'OVERFLOW' : undeclared identifierc:docuraents and settingsadninistrator1.cpp(17) : error C2065: OK' : undeclared identifier c:docun)ents and settingsadninistrator1.cpp(21) : error C206S: 'ERROR' : undeclared identifier Error executing cl.exe.I.obj - 3 error(s), warning(s)发现有OVERFLOW' : undeclared identifier,错误,是没有定义导致。加入宏替换定义OVERFLOW' oConfiguration: 1 - Win32 Debug Conpiling.1 .cpp1.obj - 0 error(s), 0 warning(s)编译之后没有发现语法错误Configuration: 1 - Win32 Debug Linking. 1.exe - 0 error(s), 0 warning(s)连接没问题,直接运行【实验结论】(结果)【实验小结】(收获体会)1 .实验要细心,认真。把数据结构书上的程序要输完整,否则程序运行不了。2 .注意每个语句不要遗漏分号。3 .除了主程序正确,程序的存储结构不要漏输进去。三、指导教师评语及成绩:评语评语等级优良中及 格不及 格1.实验报告按时完成,字迹清楚,文字叙述流 畅,逻辑性强2.实验方案设计合理3,实验过程(实验步骤详细,记录完整,数据合 理,分析透彻)4实验结论正确.成绩:指导教师签名:批阅日期:附录1:源程序# include <stdio.h># include <stdIib. h># def i ne TRUE 1# def i ne FALSE 0# def i ne OK 1# def i ne ERROR 0# def i ne INFEASIBLE -1# def i ne OVERFLOW -2typedef int Status;typedef int ElemType;# define LIST_INIT_SIZE 5线性表存储空间的初始分配量# def i ne LI ST INCREMENT 10typedef struct (ElemType *eIem;int Iength;int Ii sts i ze;SqList;Status InitList_Sq(SqList &L)L. elem=(ElemType *)ma 11oc(LIST_INIT_SIZE*sizeof (ElemType);if (SL.elem) exit(OVERFLOW);L.length=0;L. Ii sts i ze=LI ST INIT SIZE;return OK;/ InitLi st_SqElemType *newbase, *p, *q;Status L i st Insert_Sq(SqL i st &L, int i, ElemType e) if (i<1 11 i>L. length+1) return ERROR;if (L. Iength>=L. I istsize) newbase= (ElemType*) reaI Ioc(L. eIem, (L. Iistsi ze+LIST INCREMENT)*s izeof (ElemType);if(!newbase)exit(OVERFLOW);L.eIem=newbase;L.Iistsize+=LISTINCREMENT;)q=& (L. elemi-1);for (p=&(L. eIemL. Iength-1);p>=q;p)*(p+1)=*p;*q=e;+L. length;return OK:/Listlnsert_SqStatus L i stDeIete_Sq(SqL i st &L, int i,ElemType &e)if(i<1) | (i>L. Iength) return ERROR;p=& (L. elemi-1);e=*p;q=L. eIem+L. Iength-1;for (+p; p<=q; +p) *(p-1)=*p;-L.length;return OK;/ListDeIete_Sqvoid main()SqList L;int i;I n i tL i st_Sq (L);for (i=0;i<=L. Iistsize;i+) scanf (H%dH, &L. elemi);L. Iength+; for (i=0;i<L. length;i+)pr intf (n%d n, L. elemi);pr intf ('An");ElemType e;scanf (n%d%dn,&i,&e);List Insert_Sq (L, i,e);for(i=0;i<L. length;i+)printf (H%d ", *(L. elem+i);printf(HnH);scanf (M%d%dH,&i);ListDeIete_Sq(L, i, e);for(i=0;i<L. length;i+)printf(H%d n, *(L. elem+i);