1数据结构实验报告(2)学院:专业:班级:姓名学号实验组实验时间2011-11-11指导教师成绩实验项目名称线性表的链式存储结构实验目的了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法。实验条件运行Visualc++的微机一台实验原理方法和手段1.根据实验内容编程,上机调试、得出正确的运行程序。2.编译运行程序,观察运行情况和输出结果。3.写出实验报告(包括源程序和运行结果)。2实验步骤程序清单#includestdio.h#includeiostream.h#includestdlib.htypedefintElemType;structlist{ElemType*elem;intsize;intmaxsize;};/*初始化,构造一个新的线性表*/voidInitList(list&l){printf(初始化操作\n);l.maxsize=8;l.elem=newElemType[l.maxsize];if(l.elem==NULL){printf(sdfsdag);return;}l.size=0;}/*清空线性表,释放空间*/voidClearList(list&l){printf(清空操作\n);if(l.elem!=NULL){delete[]l.elem;l.elem=NULL;}l.maxsize=0;l.size=0;}/*得到线性表中位置为pos的元素*/boolGetList(listl,intpos,ElemType&tt){printf(取元素操作\n);if((pos1)||(posl.size)){printf(位置错误!);returnfalse}tt=l.elem[pos-1];returntrue;}/*得到元素item在线性表中的位置*/intFindList(listl,intitem){printf(取位置操作\n);inti;for(i=0;il.size;i++)if(l.elem[i]==item)return(i+1);return(-1);}/*得到线性表的长度*/intListlength(listl)3{return(l.size);}/*在线性表的任意位置插入一个任意元素*/boolInsertList(list&l,ElemTypeitem,intpos){inti;printf(插入操作\n);if((pos0)||(posl.size+1)){printf(位置无效);returnfalse;}if(l.size==l.maxsize){intk=sizeof(ElemType);l.elem=(ElemType*)realloc(l.elem,2*l.maxsize*k);;if(l.elem==NULL){printf(分配不成功);exit(1);}l.maxsize=2*l.maxsize;}for(i=l.size-1;ipos-1;i--)l.elem[i+1]=l.elem[i];l.elem[pos-1]=item;l.size++;returntrue;}/*删除线性表任意位置的元素*/boolDeleteList(list&l,intpos){inti;printf(删除操作\n);if((pos0)||(posl.size+1)){printf(位置无效);returnfalse;}if(l.size==0){cout线性表为空;returnfalse;}for(i=pos;il.size;i++)l.elem[i-1]=l.elem[i];l.size--;if(float(l.size)/l.maxsize0.4&&l.maxsize10){intk=sizeof(ElemType);l.elem=(ElemType*)realloc(l.elem,l.maxsize*k/2);l.maxsize=l.maxsize/2;}returntrue;}/*显示线性表的相关数据*/voiddisplaylist(listl){inti;printf(线性表长度=%d存储空间长度=%d\n,l.size,l.maxsize);for(i=0;il.size;i++){printf(元素%d=,i+1);printf(%d,l.elem[i]);4}printf(\n);}main(){listt;ElemTypetemp;intj,k;InitList(t);displaylist(t);printf(\n);for(j=0;j4;j++)InsertList(t,2*j+1,j+1);displaylist(t);printf(\n);if(GetList(t,2,temp))printf(%d\n,temp);displaylist(t);printf(\n);k=FindList(t,5);printf(元素5的位置是%d\n,k);printf(\n);DeleteList(t,2);displaylist(t);ClearList(t);displaylist(t);return(0);}实验内容1.建立一个带头结点的单向链表。2.遍历单向链表。3.对单向链表进行插入操作。4、对单向链表进行删除操作。5.编写一个主函数,调试上述算法。5实验数据实验总结此次试验不是成功的,问题有很多,由于对从C++编程和单向链表的操作不是很熟练,导致实验有很多困难。希望以后能更加熟练地进行实验,并从实验中收获更多的知识经验。指导教师意见