上海交大數(shù)據(jù)結(jié)構實驗報告_第1頁
上海交大數(shù)據(jù)結(jié)構實驗報告_第2頁
上海交大數(shù)據(jù)結(jié)構實驗報告_第3頁
上海交大數(shù)據(jù)結(jié)構實驗報告_第4頁
上海交大數(shù)據(jù)結(jié)構實驗報告_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

《數(shù)據(jù)結(jié)構》試驗報告

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

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

1.問題描述

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

2.任務要求

⑴建立模型,確定存儲結(jié)構;

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

3.試驗指導

(1)試驗類型:

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

(2)預備知識:

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

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

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

N

Ndiv8

Nmod8

1348

168

4

168

21

0

21

2

5

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

4.實現(xiàn)方案

方案描述:

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

實現(xiàn)代碼:

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

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Text;

usingSystem.Windows.Forms;

namespace進制轉(zhuǎn)換器

{

publicpartialclassMainFrm:Form

{

publicMainFrm()

{

InitializeComponent();

privat(yī)evoidMainFrm_Load_1(objectsender,EventArgse)

{

txtStart.Focus();

}

///summary>

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

////summary>

///pa=sender"</param

///paramname="e>/param

privatevoidradio_dto_Click_1(objectsender,EventArgse)

{

txtEnd.Text=";

if(txtStart.Text.Length!=0)

{

//TODO:十進制轉(zhuǎn)為八進制。

Int32i;

try

{

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

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

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

cat(yī)ch

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

}

}

else

{

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

}

txtStart.Focus();

}

///<summary

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

///</summary

///<paramname=sender</param>

///<paramname="e"/param

privat(yī)evoidradio_dth_Click(objectsender,EventArgse)

{

txtEnd.Text=;

if(txtStart.Text.Length!=0)

//TODO:十進制轉(zhuǎn)換為十六進制。

Int32i;

try

{

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

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

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

catch

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

}

else

{

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

}

txtStart.Focus();

}

///summary>

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

////summary

///<paramname=sender/param

///<paramname="e/param

privat(yī)evoidradio_dtb_Click(objectsender,EventArgse)

{

txtEnd.Text=;

if(txtStart.Text.Length!=0)

{

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

Int32i;

try

{

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

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

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

cat(yī)ch

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

}

}

else

{

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

}

txtStart.Focus();

}

///summary>

///八進制到十進制

////summary

///<paramname=sender/param>

///paramname=e></param

privatevoidradio_otd_Click(objectsender,EventArgse)

{

txtEnd.Text=;

if(txtStart.Text.Length!=0)

{

//TODO:八進制到十進制。

try

{

lblTitle.Text="八進制到十進制;

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

}

catch

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

}

}

else

{

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

txtStart.Focus();

}

///summary

///十六進制到十進制

////summary>

///<paramname=sender/param

///paramname="e"/param

privatevoidradio_htd_Click(objectsender,EventArgse)

txtEnd.Text=";

if(txtStart.Text.Length!=0)

{

try

//TODO:十六進制到十進制。

lblTitle.Text="十六進制到十進制;

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

}

catch

{

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

}

}

else

{

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

txtStart.Focus();

///summary>

///二進制到十進制

////summary

///=sender</param

///paramname=e"/param

privatevoidradio_btd_Click(objectsender,EventArgse)

txtEnd.Text=";

if(txtStart.Text.Length!=0)

{

try

{

//TODO:二進制到十進制。

lblTitle.Text=二進制到十進制;

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

}

cat(yī)ch

{

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

}

}

else

MessageBox.Show(請?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();

}

}

}

測試過程:

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

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

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

十四、Huffman編碼

1.問題描述

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

2.任務要求

⑴把握Huffman樹的概念、特點和存儲結(jié)構;

⑵把握Huffman樹的構造算法;

⑶運用Huffman樹解決編碼問題。

3.試驗指導

(1)試驗類型:

設計試驗。本試驗要求同學們針對“Huffman樹〞這個經(jīng)典的問題,應用二叉樹這種數(shù)據(jù)結(jié)構,自己設計一個解決方案,并上機實現(xiàn)。此試驗目的是培養(yǎng)學生對數(shù)據(jù)結(jié)構的簡單應用能力。

(2)預備知識:

二叉樹的定義、二叉樹的基本操作算法。

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

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

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

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

4)Huffman樹的存儲結(jié)構如下:

struct{

unsignedintweight;

unsignedintparent,lchild,rchild;

}HTNode,*HuffmanTree;

4.實現(xiàn)方案

方案描述:

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

實現(xiàn)代碼:

主要實現(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;

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

評論

0/150

提交評論