上海交大數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告_第1頁(yè)
上海交大數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告_第2頁(yè)
上海交大數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告_第3頁(yè)
上海交大數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告_第4頁(yè)
上海交大數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——上海交大數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告上海交大--數(shù)據(jù)結(jié)構(gòu)-試驗(yàn)報(bào)告

————————————————————————————————:

————————————————————————————————日期:

《數(shù)據(jù)結(jié)構(gòu)》試驗(yàn)報(bào)告

說(shuō)明:本軟件在win764位系統(tǒng)測(cè)試通過(guò),需要安裝.net3.5以上版本

七、數(shù)制轉(zhuǎn)換問(wèn)題

1.問(wèn)題描述

對(duì)于輸入的任意一個(gè)非負(fù)十進(jìn)制整數(shù),輸出與其等值的其他進(jìn)制數(shù)(二進(jìn)制、八進(jìn)制或十六進(jìn)制)。

2.任務(wù)要求

⑴建立模型,確定存儲(chǔ)結(jié)構(gòu);

⑵對(duì)任意十進(jìn)制數(shù),實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換問(wèn)題。

3.試驗(yàn)指導(dǎo)

(1)試驗(yàn)類(lèi)型:

設(shè)計(jì)試驗(yàn)。本試驗(yàn)要求同學(xué)們針對(duì)“數(shù)制轉(zhuǎn)換〞這個(gè)經(jīng)典的問(wèn)題,應(yīng)用棧的存儲(chǔ)結(jié)構(gòu),自己設(shè)計(jì)一個(gè)方案,并上機(jī)實(shí)現(xiàn)。此試驗(yàn)的目的是培養(yǎng)學(xué)生對(duì)數(shù)據(jù)結(jié)構(gòu)的簡(jiǎn)單應(yīng)用能力。

(2)預(yù)備知識(shí):

棧的基本定義、棧的基本操作算法、棧的存儲(chǔ)結(jié)構(gòu)。

(3)實(shí)現(xiàn)方法提醒:

1)以十進(jìn)制轉(zhuǎn)換為八進(jìn)制為例。將十進(jìn)制數(shù)整除8,計(jì)算過(guò)程中得到的余數(shù)依次進(jìn)棧,按出棧序列輸出棧中的內(nèi)容即為與輸入的十進(jìn)制數(shù)對(duì)應(yīng)的八進(jìn)制數(shù)。設(shè)Conversion函數(shù)執(zhí)行數(shù)制轉(zhuǎn)換的操作,對(duì)(1348)10轉(zhuǎn)換為8進(jìn)制的過(guò)程如下:

N

Ndiv8

Nmod8

1348

168

4

168

21

0

21

2

5

2)設(shè)計(jì)數(shù)制轉(zhuǎn)換的算法。

4.實(shí)現(xiàn)方案

方案描述:

本方案采用C#語(yǔ)言實(shí)現(xiàn),實(shí)現(xiàn)十進(jìn)制與其他進(jìn)制直接的轉(zhuǎn)換

實(shí)現(xiàn)代碼:

主要實(shí)現(xiàn)代碼如下

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Text;

usingSystem.Windows.Forms;

namespace進(jìn)制轉(zhuǎn)換器

{

publicpartialclassMainFrm:Form

{

publicMainFrm()

{

InitializeComponent();

privat(yī)evoidMainFrm_Load_1(objectsender,EventArgse)

{

txtStart.Focus();

}

///summary>

///十進(jìn)制轉(zhuǎn)換為八進(jìn)制

////summary>

///pa=sender"</param

///paramname="e>/param

privatevoidradio_dto_Click_1(objectsender,EventArgse)

{

txtEnd.Text=";

if(txtStart.Text.Length!=0)

{

//TO(shè)DO:十進(jìn)制轉(zhuǎn)為八進(jìn)制。

Int32i;

try

{

i=Convert.ToInt32(txtStart.Text.Trim());

lblTitle.Text=十進(jìn)制轉(zhuǎn)為八進(jìn)制";

txtEnd.Text=Convert.ToString(i,8);

cat(yī)ch

MessageBox.Show("請(qǐng)輸入合法的十進(jìn)制數(shù),提醒,MessageBoxB(niǎo)uttons.OK,MessageBoxIcon.Warning);

}

}

else

{

MessageBox.Show(請(qǐng)?zhí)峁┺D(zhuǎn)換數(shù)據(jù)!,"提醒",MessageBoxButtons.OK,MessageBoxIcon.Warning);

}

txtStart.Focus();

}

///<summary

///十進(jìn)制轉(zhuǎn)換為十六進(jìn)制

///</summary

///<paramname=sender</param>

///<paramname="e"/param

privat(yī)evoidradio_dth_Click(objectsender,EventArgse)

{

txtEnd.Text=;

if(txtStart.Text.Length!=0)

//TO(shè)DO:十進(jìn)制轉(zhuǎn)換為十六進(jìn)制。

Int32i;

try

{

i=Convert.ToInt32(txtStart.Text.Trim());

lblTitle.Text=十進(jìn)制轉(zhuǎn)換為十六進(jìn)制;

txtEnd.Text=Convert.ToString(i,16);

catch

MessageBox.Show("請(qǐng)輸入合法的十進(jìn)制數(shù),提醒,MessageBoxButtons.OK,MessageBoxIcon.Warning);

}

else

{

MessageBox.Show("請(qǐng)?zhí)峁┺D(zhuǎn)換數(shù)據(jù)!,提醒,MessageBoxButtons.OK,MessageBoxIcon.Warning);

}

txtStart.Focus();

}

///summary>

///十進(jìn)制轉(zhuǎn)換為二進(jìn)制

////summary

///<paramname=sender/param

///<paramname="e/param

privat(yī)evoidradio_dtb_Click(objectsender,EventArgse)

{

txtEnd.Text=;

if(txtStart.Text.Length!=0)

{

//TODO:十進(jìn)制轉(zhuǎn)換為二進(jìn)制。

Int32i;

try

{

i=Convert.ToInt32(txtStart.Text.Trim());

lblTitle.Text="十進(jìn)制轉(zhuǎn)換為二進(jìn)制;

txtEnd.Text=Convert.ToString(i,2);

cat(yī)ch

MessageBox.Show("請(qǐng)輸入合法的十進(jìn)制數(shù),提醒,MessageBoxButtons.OK,MessageBoxIcon.Warning);

}

}

else

{

MessageBox.Show(請(qǐng)?zhí)峁┺D(zhuǎn)換數(shù)據(jù)!,"提醒,MessageBoxButtons.OK,MessageBoxIcon.Warning);

}

txtStart.Focus();

}

///summary>

///八進(jìn)制到十進(jìn)制

////summary

///<paramname=sender/param>

///paramname=e></param

privatevoidradio_otd_Click(objectsender,EventArgse)

{

txtEnd.Text=;

if(txtStart.Text.Length!=0)

{

//TO(shè)DO:八進(jìn)制到十進(jìn)制。

try

{

lblTitle.Text="八進(jìn)制到十進(jìn)制;

txtEnd.Text=Convert.ToString(Convert.ToInt32(txtStart.Text.Trim(),8));//八進(jìn)制轉(zhuǎn)為十進(jìn)制

}

catch

MessageBox.Show(請(qǐng)?zhí)峁┖戏ǖ陌诉M(jìn)制數(shù),提醒",MessageBoxButtons.OK,MessageBoxIcon.Warning);

}

}

else

{

MessageBox.Show(請(qǐng)?zhí)峁┺D(zhuǎn)換數(shù)據(jù)?。?提醒,MessageBoxB(niǎo)uttons.OK,MessageBoxIcon.Warning);

txtStart.Focus();

}

///summary

///十六進(jìn)制到十進(jìn)制

////summary>

///<paramname=sender/param

///paramname="e"/param

privatevoidradio_htd_Click(objectsender,EventArgse)

txtEnd.Text=";

if(txtStart.Text.Length!=0)

{

try

//TODO:十六進(jìn)制到十進(jìn)制。

lblTitle.Text="十六進(jìn)制到十進(jìn)制;

txtEnd.Text=Convert.ToString(Convert.ToInt32(txtStart.Text,16));

}

catch

{

MessageBox.Show(請(qǐng)?zhí)峁┖戏ǖ氖M(jìn)制數(shù)!,提醒,MessageBoxButtons.OK,MessageBoxIcon.Warning);

}

}

else

{

MessageBox.Show(請(qǐng)?zhí)峁┺D(zhuǎn)換數(shù)據(jù)?。?提醒,MessageBoxB(niǎo)uttons.OK,MessageBoxIcon.Warning);

txtStart.Focus();

///summary>

///二進(jìn)制到十進(jìn)制

////summary

///=sender</param

///paramname=e"/param

privatevoidradio_btd_Click(objectsender,EventArgse)

txtEnd.Text=";

if(txtStart.Text.Length!=0)

{

try

{

//TODO:二進(jìn)制到十進(jìn)制。

lblTitle.Text=二進(jìn)制到十進(jìn)制;

txtEnd.Text=Convert.ToString(Convert.ToInt32(txtStart.Text,2));

}

cat(yī)ch

{

MessageBox.Show(請(qǐng)?zhí)峁┖戏ǖ亩M(jìn)制數(shù)!,提醒,MessageBoxButtons.OK,MessageBoxIcon.Warning);

}

}

else

MessageBox.Show(請(qǐng)?zhí)峁┺D(zhuǎn)換數(shù)據(jù)!,提醒,MessageBoxButtons.OK,MessageBoxIcon.Warning);

}

txtStart.Focus();

}

privat(yī)evoidreset_Click(objectsender,EventArgse)

{

txtStart.Text=;

txtEnd.Text=;

txtStart.Focus();

}

privatevoidclose_Click(objectsender,EventArgse)

{

this.Close();

}

}

}

測(cè)試過(guò)程:

不輸入數(shù)據(jù),軟件會(huì)溫馨提醒

2.輸入數(shù)據(jù)選擇轉(zhuǎn)換模式

3.測(cè)試完成,結(jié)果正確

十四、Huffman編碼

1.問(wèn)題描述

設(shè)某編碼系統(tǒng)共有個(gè)字符,使用頻率分別為,設(shè)計(jì)一個(gè)不等長(zhǎng)的編碼方案,輸出每個(gè)字符對(duì)應(yīng)的編碼,使得該編碼系統(tǒng)的空間效率最好。

2.任務(wù)要求

⑴把握Huffman樹(shù)的概念、特點(diǎn)和存儲(chǔ)結(jié)構(gòu);

⑵把握Huffman樹(shù)的構(gòu)造算法;

⑶運(yùn)用Huffman樹(shù)解決編碼問(wèn)題。

3.試驗(yàn)指導(dǎo)

(1)試驗(yàn)類(lèi)型:

設(shè)計(jì)試驗(yàn)。本試驗(yàn)要求同學(xué)們針對(duì)“Huffman樹(shù)〞這個(gè)經(jīng)典的問(wèn)題,應(yīng)用二叉樹(shù)這種數(shù)據(jù)結(jié)構(gòu),自己設(shè)計(jì)一個(gè)解決方案,并上機(jī)實(shí)現(xiàn)。此試驗(yàn)?zāi)康氖桥囵B(yǎng)學(xué)生對(duì)數(shù)據(jù)結(jié)構(gòu)的簡(jiǎn)單應(yīng)用能力。

(2)預(yù)備知識(shí):

二叉樹(shù)的定義、二叉樹(shù)的基本操作算法。

(3)實(shí)現(xiàn)方法提醒:

1)以字符出現(xiàn)的次數(shù)為權(quán)值,個(gè)結(jié)點(diǎn)作為根結(jié)點(diǎn)分別構(gòu)成棵二叉樹(shù);

2)所有二叉樹(shù)中選取兩棵根結(jié)點(diǎn)權(quán)值最小的樹(shù)作為左右子樹(shù)構(gòu)造一棵新二叉樹(shù),新二叉樹(shù)根結(jié)點(diǎn)的權(quán)值為左右子樹(shù)上根結(jié)點(diǎn)的權(quán)值之和,并刪除原先的兩棵二叉樹(shù);

3)重復(fù)上述步驟,直到只剩一棵二叉樹(shù)為止。

4)Huffman樹(shù)的存儲(chǔ)結(jié)構(gòu)如下:

struct{

unsignedintweight;

unsignedintparent,lchild,rchild;

}HTNode,*HuffmanTree;

4.實(shí)現(xiàn)方案

方案描述:

本方案采用C#語(yǔ)言實(shí)現(xiàn)數(shù)據(jù)的Huffman編碼與解碼

實(shí)現(xiàn)代碼:

主要實(shí)現(xiàn)代碼如下:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Text;

usingSystem.Windows.Forms;

usingSystem.Collections.Specialized;

namespaceHuffmanCode

{

publicpartialclassForm1:Form

{

classNode

{

publiccharcode;

publicuintprioirry;

publicNodelchild;

publicNoderchild;

}

publicForm1()

{

InitializeComponent();

}

privateDictionarychar,stringdictcode=newDictionary<char,string();

privateNodehuffTree(cuò);

privateintcomparisonNode(Noden1,Noden2)

{

return(int)(n1.prioirry-n2.prioirry);

privatestringencode(stringstr)

{

dictcode.Clear();

huffTree=null;

if(string.IsNullOrEmpty(str))

{

return;

Dictionarychar,uintpriorityQueue=newDictionarychar,uint();

for(inti=0;istr.Length;i++)

{

if(priorityQueue.ContainsKey(str[i]))

{

priorityQueue[str[i]]++;

}

else

{

priorityQueue.Add(str[i],1);

}

}

List<Nodelistpc=newListNode();

foreach(variteminpriorityQueue)

{

listpc.Add(newNode()

prioirry=item.Value,lchild=null,rchild=null,code=item.Key

});

}

listpc.Sort(comparisonNode);

while(listpc.Count1)

{

Noden=newNode();

n.prioirry=listpc[0].prioirry+listpc[1].prioirry;

n.lchild=listpc[0];

n.rchild=listpc[1];

listpc.RemoveAt(0);

listpc.RemoveAt(0);

intindex=-1;

for(inti=0;ilistpc.Count;i++)

if(n.prioirry=listpc[i].prioirry)

{

index=i;

break;

}

if(index==-1)

index=listpc.Count;

}

listpc.Insert(index,n);

}

stringencodestr=";

viewTree(listpc[0],);

huffTree=listpc[0];

for(inti=0;istr.Length;i++)

encodestr+=dictcode[str[i]];

}

returnencodestr;

privatevoidviewTree(Noden,stringv)

{

if(n.code!='\0)

{

dictcode.Add(n.code,v);

}

else

{

if(n.lchild!=null)

{

stringvl=v+0";

viewTree(cuò)(n.lchild,vl);

}

if(n.rchild!=null)

{

stringvr=v+1;

viewTree(n.rchild,vr);

}

}

}

privatestringdecode(stringstr)

{

Noderoot=huffTree;

stringresult=";

for(inti=0;istr.Length;i

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論