版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
本文格式為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)告
說明:本軟件在win764位系統(tǒng)測試通過,需要安裝.net3.5以上版本
七、數(shù)制轉(zhuǎn)換問題
1.問題描述
對于輸入的任意一個非負(fù)十進(jìn)制整數(shù),輸出與其等值的其他進(jìn)制數(shù)(二進(jìn)制、八進(jìn)制或十六進(jìn)制)。
2.任務(wù)要求
⑴建立模型,確定存儲結(jié)構(gòu);
⑵對任意十進(jìn)制數(shù),實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換問題。
3.試驗(yàn)指導(dǎo)
(1)試驗(yàn)類型:
設(shè)計(jì)試驗(yàn)。本試驗(yàn)要求同學(xué)們針對“數(shù)制轉(zhuǎn)換〞這個經(jīng)典的問題,應(yīng)用棧的存儲結(jié)構(gòu),自己設(shè)計(jì)一個方案,并上機(jī)實(shí)現(xiàn)。此試驗(yàn)的目的是培養(yǎng)學(xué)生對數(shù)據(jù)結(jié)構(gòu)的簡單應(yīng)用能力。
(2)預(yù)備知識:
棧的基本定義、棧的基本操作算法、棧的存儲結(jié)構(gòu)。
(3)實(shí)現(xiàn)方法提醒:
1)以十進(jìn)制轉(zhuǎn)換為八進(jìn)制為例。將十進(jìn)制數(shù)整除8,計(jì)算過程中得到的余數(shù)依次進(jìn)棧,按出棧序列輸出棧中的內(nèi)容即為與輸入的十進(jìn)制數(shù)對應(yīng)的八進(jìn)制數(shù)。設(shè)Conversion函數(shù)執(zhí)行數(shù)制轉(zhuǎn)換的操作,對(1348)10轉(zhuǎn)換為8進(jìn)制的過程如下:
N
Ndiv8
Nmod8
1348
168
4
168
21
0
21
2
5
2
0
2
2)設(shè)計(jì)數(shù)制轉(zhuǎn)換的算法。
4.實(shí)現(xiàn)方案
方案描述:
本方案采用C#語言實(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("請輸入合法的十進(jìn)制數(shù),提醒,MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
}
else
{
MessageBox.Show(請?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("請輸入合法的十進(jìn)制數(shù),提醒,MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
}
else
{
MessageBox.Show("請?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("請輸入合法的十進(jìn)制數(shù),提醒,MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
}
else
{
MessageBox.Show(請?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(請?zhí)峁┖戏ǖ陌诉M(jìn)制數(shù),提醒",MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
}
else
{
MessageBox.Show(請?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_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(請?zhí)峁┖戏ǖ氖M(jìn)制數(shù)!,提醒,MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
}
else
{
MessageBox.Show(請?zhí)峁┺D(zhuǎn)換數(shù)據(jù)?。?提醒,MessageBoxButtons.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(請?zhí)峁┖戏ǖ亩M(jìn)制數(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.問題描述
設(shè)某編碼系統(tǒng)共有個字符,使用頻率分別為,設(shè)計(jì)一個不等長的編碼方案,輸出每個字符對應(yīng)的編碼,使得該編碼系統(tǒng)的空間效率最好。
2.任務(wù)要求
⑴把握Huffman樹的概念、特點(diǎn)和存儲結(jié)構(gòu);
⑵把握Huffman樹的構(gòu)造算法;
⑶運(yùn)用Huffman樹解決編碼問題。
3.試驗(yàn)指導(dǎo)
(1)試驗(yàn)類型:
設(shè)計(jì)試驗(yàn)。本試驗(yàn)要求同學(xué)們針對“Huffman樹〞這個經(jīng)典的問題,應(yīng)用二叉樹這種數(shù)據(jù)結(jié)構(gòu),自己設(shè)計(jì)一個解決方案,并上機(jī)實(shí)現(xiàn)。此試驗(yàn)?zāi)康氖桥囵B(yǎng)學(xué)生對數(shù)據(jù)結(jié)構(gòu)的簡單應(yīng)用能力。
(2)預(yù)備知識:
二叉樹的定義、二叉樹的基本操作算法。
(3)實(shí)現(xiàn)方法提醒:
1)以字符出現(xiàn)的次數(shù)為權(quán)值,個結(jié)點(diǎn)作為根結(jié)點(diǎn)分別構(gòu)成棵二叉樹;
2)所有二叉樹中選取兩棵根結(jié)點(diǎn)權(quán)值最小的樹作為左右子樹構(gòu)造一棵新二叉樹,新二叉樹根結(jié)點(diǎn)的權(quán)值為左右子樹上根結(jié)點(diǎn)的權(quán)值之和,并刪除原先的兩棵二叉樹;
3)重復(fù)上述步驟,直到只剩一棵二叉樹為止。
4)Huffman樹的存儲結(jié)構(gòu)如下:
struct{
unsignedintweight;
unsignedintparent,lchild,rchild;
}HTNode,*HuffmanTree;
4.實(shí)現(xiàn)方案
方案描述:
本方案采用C#語言實(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;
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)系上傳者。文件的所有權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度股權(quán)代持協(xié)議范本及企業(yè)并購交易中的運(yùn)用4篇
- 二零二五年度牛棚租賃與農(nóng)業(yè)觀光合作協(xié)議4篇
- 2025年度個人專利轉(zhuǎn)讓合同范例(高新技術(shù)專利授權(quán)協(xié)議)2篇
- 2025年個人承建民宿建筑工程施工合同范本4篇
- 2025年度智能設(shè)備安裝與維護(hù)個人勞務(wù)分包協(xié)議書范本4篇
- 2025年度電梯安全技術(shù)研發(fā)與創(chuàng)新基金合作協(xié)議3篇
- 二零二五年度門窗行業(yè)節(jié)能減排技術(shù)合同8篇
- 二零二五版鎳礦市場行情預(yù)測與分析合同4篇
- 2025版高科技泥工裝修工程合同書4篇
- 2025年度互聯(lián)網(wǎng)企業(yè)個人勞務(wù)派遣服務(wù)合同樣本2篇
- 《健康體檢知識》課件
- 生產(chǎn)計(jì)劃主管述職報(bào)告
- 名表買賣合同協(xié)議書
- JTG-T-F20-2015公路路面基層施工技術(shù)細(xì)則
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫附答案
- 中西方校服文化差異研究
- 《子宮肉瘤》課件
- 《準(zhǔn)媽媽衣食住行》課件
- 給男友的道歉信10000字(十二篇)
- 客人在酒店受傷免責(zé)承諾書范本
- 練字本方格模板
評論
0/150
提交評論