


版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、編號(hào):時(shí)間:2021年3月19日數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告 數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告 想必學(xué)計(jì)算機(jī)專(zhuān)業(yè)的同學(xué)都知道數(shù)據(jù)結(jié)構(gòu)是一門(mén)比較重要的課程,那么,下面是自查報(bào)告網(wǎng)我給大家整理收集的數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告,供大家閱讀參考。 一、實(shí)驗(yàn)?zāi)康募耙?1)掌握棧和隊(duì)列這兩種特殊的線性表,熟悉它們的特性,在實(shí)際問(wèn)題背景下靈活運(yùn)用它們。 本實(shí)驗(yàn)訓(xùn)練的要點(diǎn)是“?!焙汀瓣?duì)列”的觀點(diǎn); 二、實(shí)驗(yàn)內(nèi)容 1) 利用棧,實(shí)現(xiàn)數(shù)制轉(zhuǎn)換。 2) 利用棧,實(shí)現(xiàn)任一個(gè)表達(dá)式中的語(yǔ)法檢查(選做)。 3) 編程實(shí)現(xiàn)隊(duì)列在兩種存儲(chǔ)結(jié)構(gòu)中的基本操作(隊(duì)列的初始化、判隊(duì)列空、入隊(duì)列、出隊(duì)列); 三、實(shí)驗(yàn)流程、操作步驟或核心代碼、算法片段 順序棧: stat
2、us initstack(sqstack s) s.base=(elemtype*)malloc(stack_init_size*sizeof(elemtype); if(!s.base) return error; s.top=s.base; s.stacksize=stack_init_size; return ok; status destorystack(sqstack s) free(s.base); return ok; status clearstack(sqstack s) s.top=s.base; return ok; status stackempty(sqstack s
3、) if(s.base=s.top) return ok; return error; int stacklength(sqstack s) return s.top-s.base; status gettop(sqstack s,elemtype e) if(s.top-s.base=s.stacksize) s.base=(elemtype *)realloc(s.base,(s.stacksize+stackincrement)*sizeof(elemtype); if(!s.base) return error; s.top=s.base+s.stacksize; s.stacksiz
4、e+=stackincrement; *s.top+=e; return ok; status push(sqstack s,elemtype e) if(s.top-s.base=s.stacksize) s.base=(elemtype *)realloc(s.base,(s.stacksize+stackincrement)*sizeof(elemtype); if(!s.base) return error; s.top=s.base+s.stacksize; s.stacksize+=stackincrement; *s.top+=e; return ok; status pop(s
5、qstack s,elemtype e) if(s.top=s.base) return error; e=*-s.top; return ok; status stacktraverse(sqstack s) elemtype *p; p=(elemtype *)malloc(sizeof(elemtype); if(!p) return error; p=s.top; while(p!=s.base)/s.top上面一個(gè). p-; printf(%d ,*p); return ok; status compare(sqstack s) int flag,ture=ok,false=erro
6、r; elemtype e,x; initstack(s); flag=ok; printf(請(qǐng)輸入要進(jìn)?;虺鰲5脑兀?; while(x= getchar)!=#flag) switch (x) case (: case : case : if(push(s,x)=ok) printf(括號(hào)匹配成功!nn); break; case ): if(pop(s,e)=error | e!=() printf(沒(méi)有滿足條件n); flag=false; break; case : if ( pop(s,e)=error | e!=) flag=false; break; case : if (
7、pop(s,e)=error | e!=) flag=false; break; if (flag x=# stackempty(s) return ok; else return error; 鏈隊(duì)列: status initqueue(linkqueue q) q.front =q.rear= (queueptr)malloc(sizeof(qnode); if (!q.front) return error; q.front-next = null; return ok; status destoryqueue(linkqueue q) while(q.front) q.rear=q.f
8、ront-next; free(q.front); q.front=q.rear; return ok; status queueempty(linkqueue q) if(q.front-next=null) return ok; return error; status queuelength(linkqueue q) int i=0; queueptr p,q; p=q.front; while(p-next) i+; p=q.front; q=p-next; p=q; return i; status gethead(linkqueue q,elemtype e) queueptr p
9、; p=q.front-next; if(!p) return error; e=p-data; return e; status clearqueue(linkqueue q) queueptr p; while(q.front-next ) p=q.front-next; free(q.front); q.front=p; q.front-next=null; q.rear-next=null; return ok; status enqueue(linkqueue q,elemtype e) queueptr p; p=(queueptr)malloc(sizeof (qnode); i
10、f(!p) return error; p-data=e; p-next=null; q.rear-next = p; q.rear=p; /p-next 為空 return ok; status dequeue(linkqueue q,elemtype e) queueptr p; if (q.front = q.rear) return error; p = q.front-next; e = p-data; q.front-next = p-next; if (q.rear = p) q.rear = q.front; /只有一個(gè)元素時(shí)(不存在指向尾指針) free (p); retur
11、n ok; status queuetraverse(linkqueue q) queueptr p,q; if( queueempty(q)=ok) printf(這是一個(gè)空隊(duì)列!n); return error; p=q.front-next; while(p) q=p; printf(%d-n,q-data); q=p-next; p=q; return ok; 循環(huán)隊(duì)列: status initqueue(sqqueue q) q.base=(qelemtype*)malloc(maxqsize*sizeof(qelemtype); if(!q.base) exit(owerflow)
12、; q.front=q.rear=0; return ok; status enqueue(sqqueue q,qelemtype e) if(q.rear+1)%maxqsize=q.front) return error; q.baseq.rear=e; q.rear=(q.rear+1)%maxqsize; return ok; status dequeue(sqqueue q,qelemtype e) if(q.front=q.rear) return error; e=q.baseq.front; q.front=(q.front+1)%maxqsize; return ok; in
13、t queuelength(sqqueue q) return(q.rear-q.front+maxqsize)%maxqsize; status destoryqueue(sqqueue q) free(q.base); return ok; status queueempty(sqqueue q) /判空 if(q.front =q.rear) return ok; return error; status queuetraverse(sqqueue q) if(q.front=q.rear) printf(這是一個(gè)空隊(duì)列!); while(q.front%maxqsize!=q.rear
14、) printf(%d- ,q.baseq.front); q.front+; return ok; 一.實(shí)驗(yàn)內(nèi)容: 實(shí)現(xiàn)哈夫曼編碼的生成算法。 二.實(shí)驗(yàn)?zāi)康模?1、使學(xué)生熟練掌握哈夫曼樹(shù)的生成算法。 2、熟練掌握哈夫曼編碼的方法。 三.問(wèn)題描述: 已知n個(gè)字符在原文中出現(xiàn)的頻率,求它們的哈夫曼編碼。 1、讀入n個(gè)字符,以及字符的權(quán)值,試建立一棵huffman樹(shù)。 2、根據(jù)生成的huffman樹(shù),求每個(gè)字符的huffman編碼。并對(duì)給定的待編碼字符序列進(jìn)行編碼,并輸出。 四.問(wèn)題的實(shí)現(xiàn) (1)郝夫曼樹(shù)的存儲(chǔ)表示 typedef struct unsigned int weight; unsig
15、ned int parent,lchild,rchild; htnode,*huffmantree; /動(dòng)態(tài)分配數(shù)組存儲(chǔ)郝夫曼樹(shù) 郝夫曼編碼的存儲(chǔ)表示 typedef char* *huffmancode;/動(dòng)態(tài)分配數(shù)組存儲(chǔ)郝夫曼編碼 (2)主要的實(shí)現(xiàn)思路: a.首先定義郝夫曼樹(shù)的存儲(chǔ)形式,這里使用了數(shù)組 b.用select遍歷n個(gè)字符,找出權(quán)值最小的兩個(gè) c.構(gòu)造郝夫曼樹(shù)ht,并求出n個(gè)字符的郝夫曼編碼hc 總結(jié) 1.基本上沒(méi)有什么太大的問(wèn)題,在調(diào)用select這個(gè)函數(shù)時(shí),想把權(quán)值最小的兩個(gè)結(jié)點(diǎn)的序號(hào)帶回huffmancoding,所以把那2個(gè)序號(hào)設(shè)置成了引用。 2.在編程過(guò)程中,在什么時(shí)候
16、分配內(nèi)存,什么時(shí)候初始化花的時(shí)間比較長(zhǎng) 3.最后基本上實(shí)現(xiàn)后,發(fā)現(xiàn)結(jié)果仍然存在問(wèn)題,經(jīng)過(guò)分步調(diào)試,發(fā)現(xiàn)了特別低級(jí)的輸入錯(cuò)誤。把hti.weight=hts1.weight+hts2.weight;中的s2寫(xiě)成了i 附: /動(dòng)態(tài)分配數(shù)組存儲(chǔ)郝夫曼樹(shù) typedef struct int weight; /字符的權(quán)值 int parent,lchild,rchild; htnode,*huffmantree; /動(dòng)態(tài)分配數(shù)組存儲(chǔ)郝夫曼編碼 typedef char* *huffmancode; /選擇n個(gè)(這里是k=n)節(jié)點(diǎn)中權(quán)值最小的兩個(gè)結(jié)點(diǎn) void select(huffmantree ht
17、,int k,int s1,int s2) int i; i=1; while(i=k hti.parent!=0)i+; /下面選出權(quán)值最小的結(jié)點(diǎn),用s1指向其序號(hào) s1=i; for(i=1;i=k;i+) if(hti.parent=0hti.weight /下面選出權(quán)值次小的結(jié)點(diǎn),用s2指向其序號(hào) for(i=1;i=k;i+) if(hti.parent=0i!=s1)break; s2=i; for(i=1;i=k;i+) if(hti.parent=0i!=s1hti.weight /構(gòu)造huffman樹(shù),求出n個(gè)字符的編碼 void huffmancoding(huffmant
18、ree ht,huffmancode hc,int *w,int n) int m,c,f,s1,s2,i,start; char *cd; if(n=1)return; m=2*n-1; /n個(gè)葉子n-1個(gè)結(jié)點(diǎn) ht=(huffmantree)malloc(m+1)*sizeof(htnode); /0號(hào)單元未用,預(yù)分配m+1個(gè)單元 huffmantree p=ht+1; w+; /w的號(hào)單元也沒(méi)有值,所以從號(hào)單元開(kāi)始 for(i=1;i=n;i+,p+,w+) p-weight=*w; p-parent=p-rchild=p-lchild=0; for(;i=m;+i,+p) p-weight=p-parent=p-rchild=p-lchild=0; for(i=n+1;i=m;i+) select(ht,i-1,s1,s2); /選出當(dāng)前權(quán)值最小的 hts1.parent=i; hts2.parent=i; hti.lchild=s1; hti.rchild=s2; hti.weight=hts1.weight+hts2.weight; /從葉子到根逆向求每個(gè)字符的郝夫曼編碼 hc=(huffmancode
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/IEC 27403:2024 EN Cybersecurity – IoT security and privacy – Guidelines for IoT-domotics
- 2025年無(wú)機(jī)分離膜材料合作協(xié)議書(shū)
- 2025版安置房買(mǎi)賣(mài)合同范本:限價(jià)房交易政策范本
- 2025年度廠區(qū)門(mén)衛(wèi)智能化升級(jí)改造服務(wù)合同范本
- 2025年高壓清洗車(chē)合作協(xié)議書(shū)
- 社團(tuán)活動(dòng)反饋與改進(jìn)方案計(jì)劃
- 教學(xué)資源整合與優(yōu)化策略計(jì)劃
- 企業(yè)未來(lái)發(fā)展的創(chuàng)新思考計(jì)劃
- 財(cái)務(wù)企劃管理計(jì)劃
- 建立健全院內(nèi)溝通反饋機(jī)制的計(jì)劃
- 蛤蟆先生去看心理醫(yī)生
- 懸挑式卸料平臺(tái)安拆作業(yè)安全技術(shù)交底
- 疾病診斷編碼庫(kù)ICD-10
- 蘭州市規(guī)范醫(yī)療服務(wù)價(jià)格項(xiàng)目基準(zhǔn)價(jià)格表
- 西漢-北京大學(xué)歷史學(xué)系教學(xué)課件
- 產(chǎn)品設(shè)計(jì)材料及工藝PPT完整版全套教學(xué)課件
- 2006年度銀行業(yè)金融機(jī)構(gòu)信息科技風(fēng)險(xiǎn)評(píng)價(jià)審計(jì)要點(diǎn)
- 反恐C-TPAT程序文件整套(通用)
- 2022年全國(guó)高考詩(shī)歌鑒賞試題-教學(xué)課件
- 化學(xué)檢驗(yàn)工高級(jí)工理論知識(shí)試題題及答案
- 廣東省五年一貫制語(yǔ)文試卷
評(píng)論
0/150
提交評(píng)論