串-數(shù)據(jù)結(jié)構(gòu)實驗報告修改版_第1頁
串-數(shù)據(jù)結(jié)構(gòu)實驗報告修改版_第2頁
串-數(shù)據(jù)結(jié)構(gòu)實驗報告修改版_第3頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第一篇:串-數(shù)據(jù)結(jié)構(gòu)實驗報告【源程序】:#include#include#includevoidchoose(char*s,inti,intm,char*t);//i位置截取m個字符函數(shù)voidmain()主函數(shù){char*s,*t;inti,sl,m;s=(char*)malloc(100*sizeof(char));t=(char*)malloc(100*sizeof(char));printf("\ns=?");gets(s);printf("\ns=%s\n",s);printf("\ni=?");scanf("%d",&i);printf("\ni=%d\n",i);printf("\nm=?");scanf("%d",&m);printf("\nm=%d\n",m);sl=strlen(s);if(i>sl)printf("i位置出錯\n");elseif(i+m>sl+1)printf("m位置出錯\n");else{choose(s,i,m,t);printf("\n子串為t=%s\n",t);}}//end_mainvoidchoose(char*s,inti,intm,char*t){intn;intj=0;for(n=i;n三.實驗結(jié)論及分析串的存儲結(jié)構(gòu)包含有順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)。在串的順序存儲結(jié)構(gòu)中,表示串的長度通常有兩種方法:一種方法是設(shè)置一個串的長度參數(shù),其優(yōu)點在于便于在算法中用長度參數(shù)控制循環(huán)過程;另一種方法是在串值得末尾添加結(jié)束標(biāo)記,此種方法的優(yōu)點在于便于系統(tǒng)自動實現(xiàn)。在串的存儲過程中,串值用驗在實習(xí)一中,gets(),scantf()兩個函數(shù)的不同在于,gets()通過鍵盤接受字符時,直到遇到換行符結(jié)束,而scanf()結(jié)束標(biāo)志可以是‘空格鍵‘a(chǎn)bc。四、實驗總結(jié)本次試驗之后,學(xué)會了串函數(shù)的相關(guān)調(diào)用以及串的相應(yīng)操作。第二篇:數(shù)據(jù)結(jié)構(gòu)實驗報告注意:實驗結(jié)束后提交一份實驗報告電子文檔8宋思怡《數(shù)據(jù)結(jié)構(gòu)》實驗報告(一)學(xué)號:姓名:專業(yè)年級:實驗名稱:線性表414實驗?zāi)康模?、熟悉線性表的定義及其順序和鏈?zhǔn)酱鎯Y(jié)構(gòu);2、熟練掌握線性表在順序存儲結(jié)構(gòu)上實現(xiàn)基本操作的方法;3、熟練掌握在各種鏈表結(jié)構(gòu)中實現(xiàn)線性表基本操作的方法;4、掌握用C/C++語言調(diào)試程序的基本方法。實驗內(nèi)容:一、編寫程序?qū)崿F(xiàn)順序表的各種基本運算,并在此基礎(chǔ)上設(shè)計一個主程序完成如下功能:(1)初始化順序表L;(2)依次在L尾部插入元素-1,21,13,24,8;輸出順序表L;輸出順序表L長度;判斷順序表L是否為空;輸出順序表L3個元素;24的位置;在L40;輸出順序表L;L5個元素;源代碼調(diào)試分析(給出運行結(jié)果界面)二、編寫程序?qū)崿F(xiàn)單鏈表的各種基本運算,并在此基礎(chǔ)上設(shè)計一個主程序完成如下功能:????????小結(jié)或討論:實驗中遇到的問題和解決方法實驗中沒有解決的問題體會和提高第三篇:數(shù)據(jù)結(jié)構(gòu)實驗報告南京信息工程大學(xué)實驗(實習(xí))報告實驗(實習(xí))名稱數(shù)據(jù)結(jié)構(gòu)實驗(實習(xí))日期2011-11-2得分指導(dǎo)教師周素萍系公共管理系專業(yè)信息管理與信息系統(tǒng)年級10120102307003實驗一順序表的基本操作及C語言實現(xiàn)【實驗?zāi)康摹?、順序表的基本操作及C語言實現(xiàn)【實驗要求】1、用C語言建立自己的線性表結(jié)構(gòu)的程序庫,實現(xiàn)順序表的基本操作。2、對線性表表示的集合,集合數(shù)據(jù)由用戶從鍵盤輸入(數(shù)據(jù)類型為整型得數(shù)據(jù)按從小到大的順序存放,將兩個集合的并的結(jié)果存儲在一個新的線性表集合中,并輸出?!緦嶒瀮?nèi)容】1、根據(jù)教材定義的順序表機構(gòu),用C查找等操作;2、利用上述順序表操作實現(xiàn)如下程序:建立兩個順序表表示的集合(復(fù)的元素,并求這樣的兩個集合的并?!緦嶒灲Y(jié)果】[實驗數(shù)據(jù)、結(jié)果、遇到的問題及解決]一.StatusInsertOrderList(SqList&va,ElemTypex){}二.StatusDeleteK(SqList&a,inti,intk){1//在非遞減的順序表va中插入元素x并使其仍成為順序表的算法inti;if(va.length==va.listsize)return(OVERFLOW);for(i=va.length;i>0,x}//注意i的編號從0開始intj;if(ia.length-1||ka.length-i)returnINFEASIBLE;for(j=0;j三.//將合并逆置后的結(jié)果放在C表中,并刪除B表StatusListMergeOppose_L(LinkList&A,LinkList&B,LinkList&C){LinkListpa,pb,qa,qb;pa=A;pb=B;qa=pa;qb=pb;//pa的前驅(qū)指針//pb的前驅(qū)指針pa=pa->next;pb=pb->next;A->next=NULL;C=A;while(pa&&pb){}while(pa){}qa=pa;pa=pa->next;qa->next=A->next;A->next=qa;if(pa->datadata){}else{}qb=pb;pb=pb->next;qb->next=A->next;將當(dāng)前最小結(jié)點插入A表表頭A->next=qb;qa=pa;pa=pa->next;qa->next=A->next;A表表頭A->next=qa;}}pb=B;free(pb);returnOK;qb=pb;pb=pb->next;qb->next=A->next;A->next=qb;順序表就是把線性表的元素存儲在數(shù)組中,元素之間的關(guān)系直接通過相鄰元素的位置來表達(dá)。優(yōu)點:簡單,數(shù)據(jù)元素的提取速度快;)靜態(tài)存儲,無法預(yù)知問題規(guī)模的大小,可能空間不足,或浪費存儲空間2)求兩個集合的并集s1s2的并集,并將結(jié)果存入ss1復(fù)制到ss2中的每個元素依次插入到集合s中,當(dāng)然重復(fù)的元素不應(yīng)該被插入,最后在s中就s1s2的并集,也就是在s所對應(yīng)的實際參數(shù)集合中得到并集。第四篇:數(shù)據(jù)結(jié)構(gòu)實驗報告數(shù)據(jù)結(jié)構(gòu)實驗報告第一次實驗學(xué)號:20141060106姓名:葉佳偉一、實驗?zāi)康?、復(fù)習(xí)變量、數(shù)據(jù)類型、語句、函數(shù);2、掌握函數(shù)的參數(shù)和值;3、了解遞歸。二、實驗內(nèi)容1(必做題)均分。2必做題采用遞歸和非遞歸方法計算k階裴波那契序列的第n,f1=0,…,fk-2=0,fk-1=1,fn=fn-1+fn-2+…+fn-k(n>=k)k(13(選做題)采用遞歸和非遞歸方法求解漢諾塔問題,問題描述如下:有三根柱子ABC,在柱子A上從下向上有n個從大到小的圓盤,在柱子B和C上沒有圓盤,現(xiàn)需將柱子A上的所有圓盤移到柱子C能大的在下,小的在上。要求:輸入n,輸出移動步驟。三、算法描述(采用自然語言描述)2.四、詳細(xì)設(shè)計(畫出程序流程圖)1.五、程序代碼(給出必要注釋)1.#includefloatave(intscore[],intk){inti;floats=0.0,ave;for(i=0;i}intmax(intscore[],intk){inti,max;max=score[0];for(i=0;imax)max=score[i];returnmax;}intmin(intscore[],intk){inti,min;min=score[0];for(i=0;i#includeintf(intn){intk;if(nelsereturn(2*f(n-1)-f(n-k-1));}voidmain(){intk,n,fn=0;kn:[k(11){fn=(n);printf("f%d=%d\n",n,fn);break;}}2.2#include六、測試和結(jié)果(給出測試用例以及測試結(jié)果)1.2.七、用戶手冊(告訴用戶如何使用程序)1.使用MicrcosoftVisualC++。2.使用MicrcosoftVisualC++。3第五篇:數(shù)據(jù)結(jié)構(gòu)實驗報告數(shù)據(jù)結(jié)構(gòu)實驗報告一.題目要求1)編程實現(xiàn)二叉排序樹,包括生成、插入,刪除;2)對二叉排序樹進(jìn)行先根、中根、和后根非遞歸遍歷;3)每次對樹的修改操作和遍歷操作的顯示結(jié)果都需要在屏幕上用樹的形狀表示出來。4)分別用二叉排序樹和數(shù)組去存儲一個班(50人以上)的成員信息(至少包括學(xué)號、姓名、成績3項),對比查找效率,并說明在什么情況下二叉排序樹效率高,為什么?二.解決方案對于前三個題目要求,我們用一個程序?qū)崿F(xiàn)代碼如下#include#include#include#include"Stack.h"http://棧的頭文件,沒有用上typedefintElemType;//數(shù)據(jù)類型typedefintStatus;//返回值類型//定義二叉樹結(jié)構(gòu)typedefstructBiTNode{ElemTypedata;structBiTNode*lChild,左右子樹域}BiTNode,*BiTree;intInsertBST(BiTree&T,intkey){//樹函數(shù)if(T==NULL){T=(BiTree)malloc(sizeof(BiTNode));T->data=key;T->lChild=T->rChild=NULL;return1;}elseif(keydata){InsertBST(T->lChild,key);}elseif(key>T->data){InsertBST(T->rChild,key);}elsereturn0;}BiTreeCreateBST(inta[],intn){//創(chuàng)建二叉樹函數(shù)BiTreebst=NULL;inti=0;while(i//數(shù)據(jù)域InsertBST(bst,a[i]);

入二叉i++;}returnbst;}intDelete(BiTree&T){BiTreeq,s;}if(!(T)->rChild){//右子樹為空重接它的左子樹q=T;T=(T)->lChild;free(q);}else{if(!(T)->lChild){//若左子樹空則重新接它的右子樹q=T;T=(T)->rChild;}else{q=T;s=(T)->lChild;while(s->rChild){q=s;s=s->rChild;}(T)->data=s->data;//s指向被刪除結(jié)點的前驅(qū)if(q!=T)q->rChild=s->lChild;elseq->lChild=s->lChild;free(s);}}return1;//刪除函數(shù),在T中刪除key元素intDeleteBST(BiTree&T,intkey){if(!T)return0;else{if(key==(T)->data)returnDelete(T);else{if(keydata)returnDeleteBST(T->lChild,key);elsereturnDeleteBST(T->rChild,key);}}}intPosttreeDepth(BiTreeT){//求深度inthr,hl,max;if(!T==NULL){hl=PosttreeDepth(T->lChild);hr=PosttreeDepth(T->rChild);max=hl>hr?hl:hr;returnmax+1;}elsereturn0;}voidprinttree(BiTreeT,intnlayer){//打印二叉樹if(T==NULL)return;printtree(T->rChild,nlayer+1);for(inti=0;i");}printf("%d\n",T->data);printtree(T->lChild,nlayer+1);}voidPreOrderNoRec(BiTree/歷{BiTreep=root;BiTreestack[50];intnum=0;while(NULL!=p||num>0){while(NULL!=p){printf("%d",p->data);stack[num++]=p;p=p->lChild;}num--;p=stack[num];p=p->rChild;}printf("\n");}voidInOrderNoRec(BiTreeroot)//中序非遞歸遍歷{BiTreep=root;}intnum=0;BiTreestack[50];while(NULL!=p||num>0){while(NULL!=p){stack[num++]=p;p=p->lChild;}num--;p=stack[num];printf("%d",p->data);p=p->rChild;}printf("\n");voidPostOrderNoRec(BiTreeroot)//后序非遞歸遍歷{BiTreep=root;BiTreestack[50];intnum=0;BiTreehave_visited=NULL;while(NULL!=p||num>0){while(NULL!=p){stack[num++]=p;p=p->lChild;}

序非遞歸遍p=stack[num-1];if(NULL==p->rChild||have_visited==p->rChild){printf("%d",p->data);num--;have_visited=p;p=NULL;}else{p=p->rChild;}}printf("\n");}intmain(){//主函數(shù)printf("---------------------二叉排序樹的實現(xiàn) ");printf("\n");intlayer;inti;intnum;輸入節(jié)點個數(shù):");scanf("%d",&num);依次輸入這些整數(shù)(要不相等");int*arr=(int*)malloc(num*sizeof(int));for(i=0;iscanf("%d",arr+i);}BiTreebst=CreateBST(arr,num);printf("\n");printf("二叉樹創(chuàng)建成功!");printf("\n");layer=PosttreeDepth(bst);printf("樹狀圖為:\n");printtree(bst,layer);intj;intT;intK;for(;;){loop:printf("\n");printf("***********************************************:");printf("\n");printf("1:插入節(jié)點刪除節(jié)點3:打印二叉樹4:非遞歸遍歷二叉樹5:退出");scanf("%d",&j);switch(j){case1:printf("輸入要插入的節(jié)點:");scanf("%d",&T);InsertBST(bst,T);printf("插入成功!");printf("樹狀圖為:\n");printtree(bst,layer);break;case2:}printf("輸入要刪除的節(jié)點");scanf("%d",&K);DeleteBST(bst,K);printf("刪除成功!");printf("樹狀圖為:\n");printtree(bst,layer);break;case3:layer=PosttreeDepth(bst);printtree(bst,layer);break;case4:printf("非遞歸遍歷二叉樹");printf("先序遍歷:\n");PreOrderNoRec(bst);printf("中序遍歷:\n");InOrderNoRec(bst);printf("后序遍歷:\n");PostOrderNoRec(bst);printf("樹狀圖為:\n");printtree(bst,layer);break;case5:printf("程序執(zhí)行完畢!");return0;}gotoloop;}return0;對于第四小問,要儲存學(xué)生的三個信息,需要把上面程序修改一下,二叉樹結(jié)構(gòu)變?yōu)閠ypedefintElemType;//數(shù)據(jù)類型typedefstringSlemType;typedefintStatus;//返回值類型//定義二叉樹結(jié)構(gòu)typedefstructBiTNode{SlemTypename;ElemTypescore;ElemTypeno;//數(shù)據(jù)域structBiTNode*lChild,*rChild;//左右子樹域}BiTNode,*BiTree;參數(shù)不是key,而是另外三個intInsertBST(BiTree&T,intno,intscore,stringname){//插入二叉樹函數(shù)if(T==NULL){T=(BiTree)malloc(sizeof(BiTNode));T->no=no;T->name=name;T->score=score;T->lChild=T->rChild=NULL;return1;}elseif(nono){InsertBST(T->lChild,no,score,name);}elseif(key>T->data){InsertBST(T->rChild,no,score,name);}elsereturn0;}其他含參函數(shù)也類似即可完成50個信息存儲用數(shù)組存儲50個信息,查看以往代碼#include#includeusingn

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論