1、数据结构实验报告全集实验一 线性表基本操作与简单程序。实验目得(1)掌握使用isua + 6、0上机调试程序得基本方法;(2)掌握线性表得基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构与链表存储结构上得程序设计方法。2 实验要求() 认真阅读与掌握与本实验相关得教材内容。(2) 认真阅读与掌握本章相关内容得程序.(3) 上机运行程序。(4) 保存与打印出程序得运行结果,并结合程序进行分析.(5) 按照您对线性表得操作需要,重新改写主程序并运行,打印出文件清单与运行结果实验代码:)头文件模块#incude ieam、h/头文件#incdmallo、h/库头文件-动态分配内存空间ty
2、pdfnt lemtype;/定义数据域得类型typede strclinknode/定义结点类型 eemype dat;/定义数据域 trct inkoe*next;/定义结点指针ndtype;2)创建单链表odtye crate()/建立单链表,由用户输入各结点data域之值,/以0表示输入结束 elemype d;/定义数据元素d nodetype h=NUL,*s,t;/定义结点指针 ii=1; cou建立一个单链表”end; whie(1) cou”输入第” i dta=d;hxtUL;=h;就是头指针 els/建立其余结点 =(odetpe*) maloc(sizef(nodeyp
3、e); -atad;snextU;tx=s; t=s;/t始终指向生成得单链表得最后一个节点 i+; retun h; )输出单链表中得元素oidisp(nodeyh)/输出由指向得单链表得所有ta域之值 nodetype p=h; ou”输出一个单链表:en” ; f(p=ULL)ot”空表”; wil(p!=NUL) coup-ta”;p-nex; ctedl;4)计算单链表得长度int len(notye )/返回单链表得长度 int i0; dtype p=h; wile(p!=NULL) ppnex;i+; reurni;5)寻找第i个节点node *find(ndetype *h,
4、int i)/返回第i个节点得指针 nodtyep=h; nt j=1; if(ien(h)|inxtNLL; i(i=0)/i=0:s作为该单链表得第一个节点 nex=h;=s; else fi(h,i);/查找第i个节点,并由p指向该节点 if(p!=NUL) -next=pnet; pnext=s; rtun h; 7)单链表得删除操作nodeype del(nodyp *h,i)/删除第i个节点 odetype p=h, s; int=; if(=1)删除第1个节点 =next;free(p); else pfid(h,i1);/查找第1个节点,并由p指向该节点 if(p!=UL&pn
5、xt!=NULL) =pnext;s指向要删除得节点 pnet=snxt; free(s); l cot输入得值不正确”endl; retun ;8)释放节点空间void spose(ndetpe *h)/释放单链表得所有节点占用得空间 notyp p=h,b; if(a!=NL) pb=pex; if(pb=NUL)/只有一个节点得情况 fre(a); ele whil (p!NLL)有两个及以上节点得情况 fee(pa);p=pb;pbpbnext; free(pa); 9)主程序模块:ncudsi、h”/包含头文件slikvid main() noep hea;/定义节点指针变量 hed
6、ct();/创建一个单链表 disp(hea);/输出单链表 cout单链表长度:”dfne MaxSize0ypedsru ntdataaize; in t;Stack;voi IniSack(SqStck *st) /初始化栈 sttop=;int Sackpy(SqSta s) /判断栈为空 eturn (s-p=1);id Pus(Sack *t,int x) /元素进栈i(st-topMize-1) printf(栈上溢出!n); el st-top+; tatasttop=x;voi Pp(SqSak *st)/退栈 if(sttop=-1)pf(栈下溢出n”); ele stto
7、p-;int etop(SqStack st) /获得栈顶元素 i(stop=1) print(栈空n”); retrn0; le retrn stdatstp;vod Dipay(Sqtak *st) /打印栈里元素 t i; prntf(栈中元素:); for(t-to;i=;-i)printf(”d,tdati); rintf(”n);n main() /测试SqStak L; SqStack =;IitStack(st); pr(栈空:%n,StckEmpy(s);fo(int =;dfieMaxSize 50typeef trct hr dataMaSiz; /存放字符串 int l
8、enh; /字符串长度SqString;/将一个字符串常量赋给串soidStrAssign(SqStrn s,ca cr) iti; for(i;cstri!=0;i+) /这个0代表字符串结束标志,编译系统自动加上得 、dati=csri; s、lenth=i;/字符串得复制vod StrCopy(qStrng &,SStig t) t i; or(i=0;i、ngt;+) s、ati=t、datai;、legt=t、ength; pintf(字符串复制成功了n”);/判断字符串就是否相等vo Stq(SqStrins,qStig t) in i,ame=; f(s、ength!=t、ent
9、h)sae=0;el for(i=;is、length;i+) if(、daai!=t、aa) sae; reak; f(same=0) pnf(这两个字符串不相等n); else pint(这两个字符串相等n”);/字符串得长度oidtrLegth(SqSrn)prnf(”此字符串长度为:dn,s、eng); /合并字符串Sqtring Cocat(qStrings,Sqtring t) qSris; in i;tr、gth=s、lenth+t、enth; for(=0;s、legt;i+) str、dtis、datai;for(i=0;t、engh;i+) str、aa、lngti、dat
10、ai; eturn str;/求子字符串voidSubStr(Srig s,in i,n j)SqStrngt; nt; tr、lngth=; i(i=0|is、lent|j、ength) pritf(子字符串复制失败n); or(k=1;ki+j-1;k+) st、datki1=s、dtak; r、ength=j; printf(子字符串复制成功 长度为:%d,);print(”下面输出此子字符串:n); fr(=0;s1、length+1) prnf(”字符串插入失败n); retu str; for(j=;i-1;+) r、atas1、taj; for(j=0;2、lengt;j+) s
11、r、dati-1j=s2、dtaj;o(=i1;js、engh;j+) st、das2、ngt+js1、dataj;tr、lengh1、leth+2、lth; printf(插入字符串成功 长度为:dn”,s、ngth); retun st;/删除字符串Sqring DeleS(SqStrig s,int ,nt) nt k; qtisr; sr、engh0; if(is、engti+s、leh+1) itf(字符串删除失败n”); returnstr; fr(=;ki-;k+)tr、daaks、ata;for(k=i+j;、lengh;k+) s、datak=s、datak; str、len
12、gth=s、lngtj; prit(删除子字符串成功 剩余长度为:dn,tr、legth);rern str;/替换字符串voi RStr(SqStrg s,inti,itj,qString t) it; SStringstr;s、length0; if(is、engh) pritf(字符串替换失败了n); or(k=0;ki1;) st、datk=、tk; for(=0;kt、lgh;+) str、ati+k-=t、dtak; for(k=ij;) nt(下面输出这个字符串n); fo(i0;is、egh;i+) pintf(,、daa); rit(n”); se print(目前空字符串
13、无法输出n);void main()SSring s;char awe xnng;/字符串常量 tssig(s,); ispSr(s);StrLt(s); SqSrngs,s2,t;/s1就是待复制得字符串变量 rnf(请输入一个字符串:n”); scan(s,t、ata); StrAssi(t,t、aa); SrCopy(s1,t); /复制字符串 teh(s1);DisStr(s); pinf(下面判断字符串s1与字符串s就是否相等); StrEua(s,s1); printf(下面将字符串s与字符串s合并一起);Sqtrinstr;srConcat(s,s1);/合并字符串DispStr
14、(st);StrLength(str); utr(st,2,7); /求子字符串 srDeleS(st,1,4); /删除字符串 iptr(st); StLength(str); pitf(请插入一个字符串2n”);sanf(”,s、dt); StAsig(s2,、dat);InsrSr(s,15,s2); /插入字符串 DspSr(st); Strength(st);printf(顺序字符串得基本运算到此结束了”);实验结果:实验四 编程建立二叉树,对树进行插入删除及遍历得程序1、实验目得(1) 进一步掌握指针变量得用途与程序设计方法。(2) 掌握二叉树得结构特征,以及链式存储结构得特点及程
15、序设计方法。() 掌握构造二叉树得基本方法。() 掌握二叉树遍历算法得设计方法.3 实验要求(1)认真阅读与掌握与本实验相关得教材内容。(2)掌握一个实际二叉树得创建方法.(3)掌握二叉链存储结构下二叉树操作得设计方法与遍历操作设计方法。4。实验内容(1)定义二叉链存储结构.(2)设计二叉树得基本操作(初始化一棵带头结点得二叉树、左结点插入、右结点插入、中序遍历二叉树等)。(3)按照建立一棵实际二叉树得操作需要,编写建立二叉树、遍历二叉树得函数.(4)编写测试主函数并上机运行。打印出运行结果,并结合程序运行结果进行分析。实验代码:ncluech; if(ch=0)(*T)NULL; else(
16、)ne itode;(*T)-=;creaebitree(&(T)lhild);createtre((T)rhil);void nrdrout(itre T) if()inordrot(T-cd);cutT-datalhid);postore(Trhil);coutTdatalci=NLL&t-rchild=NUL)retn1; rturn (ounlea(-lcid)+unteaf(b-cld);voiai() it t; creatbitee(t); inrdout(t); cou #includefie MAXLENGT 100typefint Kyype; pedf sucinty;E
17、leype;tdefstructlTypeelmAX_LGTH; / 0号单元空出 it ln;SSTable;int SearhBin(SSabe S,KeyTypeky) int low,hig,mi;lo = 1;hgh = ST、legt; ile(low=i) md =(lw+igh)/2; if(key =ST、elemm、e) retn md; es if(kyST、elmmid、key) hig = mid1; lse lw=i+; retu 0;voi ain()it i,eult;SSTe ST;eyTypeke;printf(plas int lngh:);scan(%d
18、,ST、egt);f(i=1;=ST、egh;+)pinf(plae iT、em:);scanf(d,ST、eli);rntf(paseiput keywrd:);scf(%,&ky);result=Search_(S,key);i(rsl)pif(”ot nn);elserntf(”Fid the k,thpositin i dn,resl);实验结果:实验六建立一组记录并进行插入排序1、 实验目得(1)掌握插入排序算法得思想.(2) 掌握顺序队列下插入排序算法得程序设计方法。2、 实验要求(1) 认真阅读与掌握教材中插入排序算法得思想。(3) 编写基于顺序队列得插入排序排序算法并上机实现。
19、、 实验内容(1) 编写基于顺序队列得插入排序函数。(2) 设计一个测试主函数,实现对基于顺序队列结构得插入排序算法得测试.() 分析程序得运行结果。实验代码:includesi、h#ncluesdli、defin MASIZE 0typdef strut itk;srke;typedef stuct ortky elemAIZE; t lengh;sortel;vi InsrtSort(sortele *) nt ,j;(i=2;ele0、key=lemi、y; /为统一算法设置监测/ for(j=1;pee0、keypelemj、e;j) p-le+1、key=pej、e;/记录后移/ p
20、-emj+1、kypem0、e; /*插入到正确位置 void main() srteem ;inti;int b6=45,23,54,6,4,46;p(sorteem *)mll(seof(sortele));lenth=;fo(i=1;7;i+) pelmi、key=bi1; -length+;IneSor();for(i=1;i;i+)prin(”%d ,pelemi、ey);sstem(pause);实验结果:实验七 建立一组记录并进行快速排序1、 实验目得() 掌握快速排序算法得思想.(2) 掌握顺序队列下快速排序算法得程序设计方法。2、 实验要求(1) 认真阅读与掌握教材中快速排序
21、算法得思想。(3)编写基于顺序队列得快速排序排序算法并上机实现。3、 实验内容(1) 编写基于顺序队列得快速排序函数。(2) 设计一个测试主函数,实现对基于顺序队列结构得快速排序算法得测试.(3) 分析程序得运行结果。实验代码:includiosteam、hd quick_srt(int a,int lo, n hig) nti,j,pivt; if (low ih) piot alow; = lw; =ih; whie (i j) /从顶端开始比较值,如果小于标准值,停止 hie (i j a = pot) j-; /将比pivot小得元素移到低端,下标加加 if ( j) a+ = aj;
22、 /从底端开始比较值,如果大于标准值,停止 while (i j& ai pivot) +; /将比pivot大得元素移到顶端,下标减减 if (i j) a- =i; /pivot移动到最终位置 a iv; /对左区间进行递归排序 quick_ort(a,lo, ); /对右区间进行递归排序 qick_srt(a,i1, hg); vo printarray(int a,int ) o(in i = 0; ;i+) cut ai ,; in ai() int aa9 = 54,3,96,3,5,72,0,4,3; ick_ort(dta, 0, ); int_arry(data,9); rer 0; 实验结果: