數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)答案_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)答案_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)答案_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)答案_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)答案_第5頁(yè)
已閱讀5頁(yè),還剩34頁(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)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上重慶文理學(xué)院軟件工程學(xué)院實(shí) 驗(yàn) 報(bào) 告 冊(cè)專(zhuān) 業(yè):_軟件工程_ _班 級(jí):_軟件工程2班_ _學(xué) 號(hào):_4 _姓 名:_周貴宇_課程名稱(chēng):_ 數(shù)據(jù)結(jié)構(gòu) _指導(dǎo)教師:_胡章平_ 2013年 06 月 25 日實(shí)驗(yàn)序號(hào)1實(shí)驗(yàn)名稱(chēng)實(shí)驗(yàn)一 線性表基本操作實(shí)驗(yàn)地點(diǎn)S-C1303實(shí)驗(yàn)日期2013年 04月 22日 實(shí)驗(yàn)內(nèi)容1. 編程實(shí)現(xiàn)在順序存儲(chǔ)的有序表中插入一個(gè)元素(數(shù)據(jù)類(lèi)型為整型)。2. 編程實(shí)現(xiàn)把順序表中從i個(gè)元素開(kāi)始的k個(gè)元素刪除(數(shù)據(jù)類(lèi)型為整型)。3. 編程序?qū)崿F(xiàn)將單鏈表的數(shù)據(jù)逆置,即將原表的數(shù)據(jù)(a1,a2.an)變成(an,.a2,a1)。(單鏈表的數(shù)據(jù)域數(shù)據(jù)類(lèi)型為

2、一結(jié)構(gòu)體,包括學(xué)生的部分信息:學(xué)號(hào),姓名,年齡)實(shí)驗(yàn)過(guò)程及步驟1. #include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define ElemType int#defineMAXSIZE 100 /*此處的宏定義常量表示線性表可能達(dá)到的最大長(zhǎng)度*/typedef struct ElemType elemMAXSIZE; /*線性表占用的數(shù)組空間*/int last; /*記錄線性表中最后

3、一個(gè)元素在數(shù)組elem 中的位置(下標(biāo)值),空表置為-1*/SeqList;#include "common.h"#include "seqlist.h"void px(SeqList *A,int j);void main()SeqList *l;int p,q,r;int i;l=(SeqList*)malloc(sizeof(SeqList);printf("請(qǐng)輸入線性表的長(zhǎng)度:");scanf("%d",&r);l->last = r-1;printf("請(qǐng)輸入線性表的各元素值:n&

4、quot;);for(i=0; i<=l->last; i+)scanf("%d",&l->elemi); px(l,i);printf("請(qǐng)輸入要插入的值:n");scanf("%d",&l->elemi);i+;px(l,i);l->last+;for(i=0; i<=l->last; i+)printf("%d ",l->elemi);printf("n");void px(SeqList *A,int j)int i,tem

5、p,k;for(i=0;i<j;i+)for(k=0;k<j-1;k+)if(A->elemi<A->elemk)temp=A->elemi;A->elemi=A->elemk;A->elemk=temp;2. #include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define ElemType int#defineMAXSIZE 10

6、0 /*此處的宏定義常量表示線性表可能達(dá)到的最大長(zhǎng)度*/typedef struct ElemType elemMAXSIZE; /*線性表占用的數(shù)組空間*/int last; /*記錄線性表中最后一個(gè)元素在數(shù)組elem 中的位置(下標(biāo)值),空表置為-1*/SeqList;#include "common.h"#include "seqlist.h"void px(SeqList *A,int j);int DelList(SeqList *L,int i,SeqList *e,int j)/*在順序表L中刪除第i個(gè)數(shù)據(jù)元素,并用指針參數(shù)e返回其值。i的

7、合法取值為1iL.last+1 */ int k,a,b,c;if(i<1)|(i>L->last+2) printf("刪除位置不合法!");return(ERROR);if(j>L->last-i) printf("刪除位置不合法!");return(ERROR);for(b=0,a=i-1;a<i+j-1;b+,a+)e->elemb=L->elema; e->last=b; /* 將刪除的元素存放到e所指向的變量中*/for(k=i;k+j-1<=L->last;k+)L->

8、elemk-1=L->elemk+j-1; /*將后面的元素依次前移*/L->last=L->last-j;printf("刪除的元素值為:");for(c=0;c<b;c+)printf("%d ",e->elemc);printf("n");return(OK);void main()SeqList *l,*q;int p,r;int i,j,m;l = (SeqList*)malloc(sizeof(SeqList);q = (SeqList*)malloc(sizeof(SeqList);prin

9、tf("請(qǐng)輸入線性表的長(zhǎng)度:");scanf("%d",&r);l->last = r-1;printf("請(qǐng)輸入線性表的各元素值:n");for(i=0; i<=l->last; i+)scanf("%d",&l->elemi); px(l,i); for(i=0;i<=r-1;i+)printf("%d ",l->elemi);printf("n");printf("請(qǐng)輸入要?jiǎng)h除的元素位置(位置+個(gè)數(shù)):n&q

10、uot;);scanf("%d%d",&p,&j);m=DelList(l,p,q,j); if(m=0)printf("無(wú)法刪除");exit(0);else if(m=1)printf("線性表內(nèi)余下元素為:n");for(i=0;i<=r-j-1;i+)printf("%d ",l->elemi);printf("n");void px(SeqList *A,int j)int i,temp,k;for(i=0;i<j;i+)for(k=0;k<j-

11、1;k+)if(A->elemi<A->elemk)temp=A->elemi;A->elemi=A->elemk;A->elemk=temp;printf("排序完成!");3. #include <stdio.h>#include <stdlib.h>#include <string.h>/*#define ElemType char*/typedef struct Node /*結(jié)點(diǎn)類(lèi)型定義*/ int num;char name10;int age;struct Node * next;N

12、ode, *LinkList; /* LinkList為結(jié)構(gòu)指針類(lèi)型*/LinkList CreateFromTail()/*通過(guò)鍵盤(pán)輸入表中元素值,利用尾插法建單鏈表,并返回該單鏈表頭指針L*/ LinkList L;Node *r, *s;int a;char b10;int c;int flag =1; /*設(shè)置一個(gè)標(biāo)志,初值為1,當(dāng)輸入"-1"時(shí),flag為0,建表結(jié)束*/L=(Node * )malloc(sizeof(Node); L->next=NULL; /*為頭結(jié)點(diǎn)分配存儲(chǔ)空間,建立空的單鏈表L*/r=L; /*r指針動(dòng)態(tài)指向鏈表的當(dāng)前表尾,以便于做

13、尾插入,其初值指向頭結(jié)點(diǎn)*/ /*循環(huán)輸入表中元素值,將建立新結(jié)點(diǎn)s插入表尾*/printf("輸入學(xué)生的信息:n");printf("學(xué)號(hào)姓名年齡n");while(flag)scanf("%d",&a);if(a=-1)flag=0;else scanf("%s%d",b,&c);s=(Node*)malloc(sizeof(Node);s->num=a; strcpy(s->name,b);s->age=c;r->next=s;r=s; r->next=NULL;

14、 return L; void ReverseList(LinkList L) Node *p,*q;p=L->next;L->next=NULL;while(p!=NULL) q=p->next; /*q指針保留p->next得值*/p->next=L->next;L->next=p; /*將p結(jié)點(diǎn)頭插入到單鏈表L中*/p=q; /*p指向下一個(gè)要插入的結(jié)點(diǎn)*/ void main()LinkList l;Node *p;printf("請(qǐng)輸入鏈表數(shù)據(jù),以-1結(jié)束!n"); l = CreateFromTail();printf(

15、"輸入的單鏈表為:n");p = l->next;while(p!=NULL)printf("%d %s %dn",p->num,p->name,p->age);p=p->next;ReverseList(l);printf("逆置后的單鏈表為:n");p = l->next;while(p!=NULL)printf("%d %s %dn",p->num,p->name,p->age);p=p->next;實(shí)驗(yàn)結(jié)果及分析1.實(shí)驗(yàn)結(jié)果: 實(shí)驗(yàn)分析:我做了三次

16、實(shí)驗(yàn),分別插入數(shù)列前,中,后的數(shù)字,實(shí)驗(yàn)證明代碼沒(méi)有錯(cuò)誤,能正常運(yùn)行、排序、輸出。存在的問(wèn)題:我不明白為什么我寫(xiě)的是降序排序,計(jì)算機(jī)運(yùn)行后就是升序排序了。希望老師能幫我修改一下。2.實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)分析:我通過(guò)三次實(shí)驗(yàn)(正常刪除、刪除個(gè)數(shù)超出、刪除位置不正確)證明代碼的正確性。改代碼可實(shí)現(xiàn)派訊,刪除,讀取刪除的內(nèi)容和輸出的功能。4. 實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)分析: 我做了兩次測(cè)試,測(cè)試證明代碼沒(méi)有錯(cuò)誤。教師評(píng)閱 教師簽名: 年 月 日實(shí)驗(yàn)序號(hào)2實(shí)驗(yàn)名稱(chēng)實(shí)驗(yàn)二 棧和隊(duì)列基本操作實(shí)驗(yàn)地點(diǎn)S-C1303實(shí)驗(yàn)日期2013年 05 月 13 日 實(shí)驗(yàn)內(nèi)容1.利用棧的運(yùn)算實(shí)現(xiàn)數(shù)制轉(zhuǎn)換-分別將十進(jìn)制轉(zhuǎn)換為八進(jìn)制和十六進(jìn)制。

17、2.編程判斷一個(gè)字符序列是否是回文序列。輸入形式為“*#*”,*為輸入的字符,#為兩序列的分隔符。3.實(shí)現(xiàn)鏈隊(duì)列管理-輸入一個(gè)整數(shù),如果是奇數(shù)就入隊(duì),如果是偶數(shù)就讓隊(duì)頭出隊(duì),直到輸入0就結(jié)束,最后輸出隊(duì)列的所有元素。實(shí)驗(yàn)過(guò)程及步驟(代碼)1.#include<stdio.h>#include<malloc.h>#include<windows.h>#define NULL 0typedef struct Numberint num; struct Number *next;Num;void Conversion(int iNum,int i); /轉(zhuǎn)換數(shù)字,

18、進(jìn)棧,iNum為待轉(zhuǎn)換的數(shù),i代表進(jìn)制void Pop(struct Number *top,int i); /顯示結(jié)果,出棧,top為棧頂指針,i代表進(jìn)制void main()int m=8,n=2,j=16; int iNum; char choose,c; printf("數(shù)制轉(zhuǎn)換nn"); printf("請(qǐng)輸入一個(gè)十進(jìn)制數(shù): "); scanf("%d",&iNum); printf("轉(zhuǎn)換后結(jié)果為:n"); printf("n八進(jìn)制:"); Conversion(iNum,m

19、); printf("十六進(jìn)制:"); Conversion(iNum,j); printf("n轉(zhuǎn)換完畢!n");void Conversion(int iNum,int i) /進(jìn)棧struct Number *top=NULL,*NewP; while(iNum!=0) NewP=(struct Number *)malloc(sizeof(struct Number); if(top=NULL) NewP->next=NULL; top=NewP; top->num=iNum%i; else NewP->next=top; to

20、p=NewP; top->num=iNum%i; iNum=iNum/i; /while Pop(top,i); printf("n");void Pop(struct Number *top,int i) /出棧 if(top=NULL) printf("???n"); else char cell="ABCDEF" struct Number *temp,*q; switch(i) case 8: /輸出八進(jìn)制 case 16: /輸出十六進(jìn)制 temp=top; while(temp!=NULL) printf("

21、;%c",celltemp->num); q=temp;temp=temp->next;free(q);break; /switch /else2.#include <stdio.h>#include <string.h>#include <conio.h>int huiWen(const char *p);int main() char test225;printf("請(qǐng)輸入序列:n"); gets(test); if(huiWen(test) printf("是回文!n"); else pri

22、ntf("不是回文!n"); getch(); return 0;int huiWen(const char *p) int i=0,n=strlen(p); while(pi=pn-i-1 && i<n-i-1) /只要相等且還未相遇則繼續(xù)循環(huán) i+; return (i<n-i-1)? 0:1); /若i<n-i-1表示中途遇到不相等的字符而退出循環(huán)3.#define TRUE 1#define FALSE 0#define MAXSIZE 50 /*隊(duì)列的最大長(zhǎng)度*/typedef structint elementMAXSIZE;

23、/* 隊(duì)列的元素空間*/int front; /*頭指針指示器*/int rear; /*尾指針指示器*/SeqQueue;/*初始化操作*/void InitQueue(SeqQueue *Q) /* 將*Q初始化為一個(gè)空的循環(huán)隊(duì)列 */Q->front=Q->rear=0;/*入隊(duì)操作*/int EnterQueue(SeqQueue *Q, int x) /*將元素x入隊(duì)*/if(Q->rear+1)%MAXSIZE=Q->front) /*隊(duì)列已經(jīng)滿(mǎn)了*/return(FALSE);Q->elementQ->rear=x;Q->rear=(Q-

24、>rear+1)%MAXSIZE; /* 重新設(shè)置隊(duì)尾指針 */return(TRUE); /*操作成功*/*出隊(duì)操作*/int DeleteQueue(SeqQueue *Q) /*刪除隊(duì)列的隊(duì)頭元素,用x返回其值*/if(Q->front=Q->rear) /*隊(duì)列為空*/return(FALSE);Q->front=(Q->front+1)%MAXSIZE; /*重新設(shè)置隊(duì)頭指針*/return(TRUE); /*操作成功*/int output(SeqQueue *Q)int x,i=Q->front;/*提取隊(duì)列的隊(duì)頭元素,用x返回其值*/if(Q

25、->front=Q->rear) /*隊(duì)列為空*/return(FALSE);while(i!=Q->rear)x=Q->elementi;printf("%d ",x);i+;return(TRUE); /*操作成功*/#include "seqqueue1.h"#include<stdio.h>void main()int c;SeqQueue Q;InitQueue(&Q);printf("請(qǐng)輸入整數(shù):");scanf("%d",&c);while(c!=0

26、)if(c%2=1)EnterQueue(&Q,c);else DeleteQueue(&Q);printf("請(qǐng)輸入整數(shù):");scanf("%d",&c); output(&Q);實(shí)驗(yàn)結(jié)果及分析(每道題的運(yùn)行結(jié)果及分析總結(jié)) 1. 實(shí)驗(yàn)結(jié)果: 實(shí)驗(yàn)分析:我測(cè)視了兩組數(shù)據(jù),均正確,證明我的代碼沒(méi)有錯(cuò)誤。該代碼可實(shí)現(xiàn)將一個(gè)十進(jìn)制數(shù)轉(zhuǎn)換為八進(jìn)制和十六進(jìn)制的數(shù)。2. 實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)分析: 我做了四次實(shí)驗(yàn)有不同長(zhǎng)度的回文序列、長(zhǎng)度相同的非回文序列和長(zhǎng)度不同的非回文序列。實(shí)驗(yàn)正經(jīng)代碼正確。3.實(shí)驗(yàn)分析:測(cè)試了3組不同的數(shù)據(jù),均能滿(mǎn)足

27、實(shí)驗(yàn)要求,證明代碼是正確的。教師評(píng)閱 教師簽名: 年 月 日實(shí)驗(yàn)序號(hào)3實(shí)驗(yàn)名稱(chēng)實(shí)驗(yàn)三 二叉樹(shù)基本操作實(shí)驗(yàn)地點(diǎn)S-C1303實(shí)驗(yàn)日期2013年 05月 27日 實(shí)驗(yàn)內(nèi)容1. 統(tǒng)計(jì)一棵二叉樹(shù)中每種類(lèi)型結(jié)點(diǎn)數(shù)(度為0、1、2的結(jié)點(diǎn)數(shù))。2. 分別輸入一棵有6個(gè)結(jié)點(diǎn)和8個(gè)結(jié)點(diǎn)的二叉樹(shù),編程序輸出先序、中序和后序的遍歷結(jié)果。3. 哈夫曼樹(shù)及哈夫曼編碼。實(shí)驗(yàn)過(guò)程及步驟(代碼)1. #include <stdio.h>#include <malloc.h>#include <conio.h>typedef char DataType;int LeafCount,oneco

28、unt,twocount;typedef struct NodeDataType data;struct Node *LChild;struct Node *RChild;BiTNode, *BiTree;void CreateBiTree(BiTree *bt)char ch;ch = getchar(); if(ch='.') *bt=NULL; else *bt=(BiTree)malloc(sizeof(BiTNode); /生成一個(gè)新結(jié)點(diǎn) (*bt)->data=ch; CreateBiTree(&(*bt)->LChild); /生成左子樹(shù) Cr

29、eateBiTree(&(*bt)->RChild); /生成右子樹(shù)void leaf_a(BiTree root)if(root!=NULL)leaf_a(root->LChild);leaf_a(root->RChild);if (root ->LChild=NULL && root ->RChild=NULL)LeafCount+;else if(root ->LChild!=NULL) && (root ->RChild=NULL)|(root ->LChild=NULL) && (

30、root ->RChild!=NULL)onecount+;else if(root ->LChild!=NULL) && (root ->RChild!=NULL)twocount+;#include"head.h"void main()BiTree T;int treeleaf;LeafCount = 0;printf("按擴(kuò)展先序遍歷序列建立二叉樹(shù),請(qǐng)輸入序列:n"); CreateBiTree(&T);leaf_a(T);printf("求得的葉子結(jié)點(diǎn)數(shù)目為:%dn",LeafCoun

31、t);printf("求得的度為1的結(jié)點(diǎn)數(shù)目為:%dn",onecount);printf("求得的度為2的結(jié)點(diǎn)數(shù)目為:%dn",twocount);getch();2. #include <stdio.h>#include <malloc.h>#include <conio.h>typedef char DataType;int LeafCount,onecount,twocount;typedef struct NodeDataType data;struct Node *LChild;struct Node *R

32、Child;BiTNode, *BiTree;void CreateBiTree(BiTree *bt)char ch;ch = getchar(); if(ch='.') *bt=NULL; else *bt=(BiTree)malloc(sizeof(BiTNode); /生成一個(gè)新結(jié)點(diǎn) (*bt)->data=ch; CreateBiTree(&(*bt)->LChild); /生成左子樹(shù) CreateBiTree(&(*bt)->RChild); /生成右子樹(shù)void Visit(DataType a)printf("%C&q

33、uot;,a);void InOrder(BiTree root) /*中序遍歷二叉樹(shù), root為指向二叉樹(shù)(或某一子樹(shù))根結(jié)點(diǎn)的指針*/if (root!=NULL)InOrder(root ->LChild); /*中序遍歷左子樹(shù)*/Visit(root ->data); /*訪問(wèn)根結(jié)點(diǎn)*/InOrder(root ->RChild); /*中序遍歷右子樹(shù)*/void PostOrder(BiTree root) /* 后序遍歷二叉樹(shù),root為指向二叉樹(shù)(或某一子樹(shù))根結(jié)點(diǎn)的指針*/if(root!=NULL)PostOrder(root ->LChild);

34、/*后序遍歷左子樹(shù)*/PostOrder(root ->RChild); /*后序遍歷右子樹(shù)*/Visit(root ->data); /*訪問(wèn)根結(jié)點(diǎn)*/void PreOrder(BiTree root) /*先序遍歷二叉樹(shù), root為指向二叉樹(shù)(或某一子樹(shù))根結(jié)點(diǎn)的指針*/if (root!=NULL)Visit(root ->data); /*訪問(wèn)根結(jié)點(diǎn)*/PreOrder(root ->LChild); /*先序遍歷左子樹(shù)*/PreOrder(root ->RChild); /*先序遍歷右子樹(shù)*/#include"head.h"voi

35、d main()BiTree T;int treeleaf;LeafCount = 0;printf("按擴(kuò)展先序遍歷序列建立二叉樹(shù),請(qǐng)輸入序列:n"); CreateBiTree(&T);printf("先序遍歷結(jié)果:n");PreOrder(T);printf("n");printf("中序遍歷結(jié)果:n");InOrder(T);printf("n");printf("后序遍歷結(jié)果:n");PostOrder(T);printf("n");ge

36、tch();3. #include <stdio.h>#include <stdlib.h>#include <string.h>typedef char* HuffmanCode;/*動(dòng)態(tài)分配數(shù)組,存儲(chǔ)哈夫曼編碼*/typedef struct unsigned int weight ; /* 用來(lái)存放各個(gè)結(jié)點(diǎn)的權(quán)值*/unsigned int parent, LChild,RChild ; /*指向雙親、孩子結(jié)點(diǎn)的指針*/HTNode, * HuffmanTree; /*動(dòng)態(tài)分配數(shù)組,存儲(chǔ)哈夫曼樹(shù)*/void select(HuffmanTree *ht

37、,int n, int *s1, int *s2)int i;int min;for(i=1; i<=n; i+)if(*ht)i.parent = 0)min = i;i = n+1;for(i=1; i<=n; i+)if(*ht)i.parent = 0)if(*ht)i.weight < (*ht)min.weight)min = i;*s1 = min;for(i=1; i<=n; i+)if(*ht)i.parent = 0 && i!=(*s1)min = i;i = n+1;for(i=1; i<=n; i+)if(*ht)i.pa

38、rent = 0 && i!=(*s1)if(*ht)i.weight < (*ht)min.weight)min = i;*s2 = min;void CrtHuffmanTree(HuffmanTree *ht , int *w, int n) /* w存放已知的n個(gè)權(quán)值,構(gòu)造哈夫曼樹(shù)ht */int m,i;int s1,s2;m=2*n-1;*ht=(HuffmanTree)malloc(m+1)*sizeof(HTNode); /*0號(hào)單元未使用*/for(i=1;i<=n;i+) /*1-n號(hào)放葉子結(jié)點(diǎn),初始化*/(*ht)i.weight = wi;(

39、*ht)i.LChild = 0;(*ht)i.parent = 0;(*ht)i.RChild = 0;for(i=n+1;i<=m;i+)(*ht)i.weight = 0;(*ht)i.LChild = 0;(*ht)i.parent = 0;(*ht)i.RChild = 0; /*非葉子結(jié)點(diǎn)初始化*/*-初始化完畢!對(duì)應(yīng)算法步驟1-*/for(i=n+1;i<=m;i+) /*創(chuàng)建非葉子結(jié)點(diǎn),建哈夫曼樹(shù)*/ /*在(*ht)1(*ht)i-1的范圍內(nèi)選擇兩個(gè)parent為0且weight最小的結(jié)點(diǎn),其序號(hào)分別賦值給s1、s2返回*/select(ht,i-1,&s

40、1,&s2);(*ht)s1.parent=i;(*ht)s2.parent=i;(*ht)i.LChild=s1;(*ht)i.RChild=s2;(*ht)i.weight=(*ht)s1.weight+(*ht)s2.weight; /*哈夫曼樹(shù)建立完畢*/void outputHuffman(HuffmanTree HT, int m)if(m!=0)printf("%d ", HTm.weight);outputHuffman(HT,HTm.LChild);outputHuffman(HT,HTm.RChild);void CrtHuffmanCode(H

41、uffmanTree *ht, HuffmanCode *hc, int n)/*從葉子結(jié)點(diǎn)到根,逆向求每個(gè)葉子結(jié)點(diǎn)對(duì)應(yīng)的哈夫曼編碼*/char *cd;int i;unsigned int c;int start;int p;hc=(HuffmanCode *)malloc(n+1)*sizeof(char *); /*分配n個(gè)編碼的頭指針*/cd=(char * )malloc(n * sizeof(char ); /*分配求當(dāng)前編碼的工作空間*/cdn-1='0' /*從右向左逐位存放編碼,首先存放編碼結(jié)束符*/for(i=1;i<=n;i+) /*求n個(gè)葉子結(jié)點(diǎn)對(duì)

42、應(yīng)的哈夫曼編碼*/start=n-1; /*初始化編碼起始指針*/for(c=i,p=(*ht)i.parent; p!=0; c=p,p=(*ht)p.parent) /*從葉子到根結(jié)點(diǎn)求編碼*/if( (*ht)p.LChild = c) cd-start='0' /*左分支標(biāo)0*/else cd-start='1' /*右分支標(biāo)1*/hci=(char *)malloc(n-start)*sizeof(char); /*為第i個(gè)編碼分配空間*/strcpy(hci,&cdstart);free(cd);for(i=1;i<=n;i+)prin

43、tf("%d編碼為%sn",(*ht)i.weight,hci);void main() HuffmanTree HT; HuffmanCode HC; int *w; int i,n; / the number of elements; int wei; / the weight of a element; int m;printf("input the total number of the Huffman Tree:" ); scanf("%d",&n); w=(int *)malloc(n+1)*sizeof(int)

44、; for(i=1;i<=n;i+) printf("input the %d element's weight:",i); fflush(stdin);scanf("%d",&wei); wi=wei; CrtHuffmanTree(&HT,w,n); m = 2*n-1;outputHuffman(HT,m); printf("n");CrtHuffmanCode(&HT,&HC,n);實(shí)驗(yàn)結(jié)果及分析(每道題的運(yùn)行結(jié)果及分析總結(jié)) 1. 實(shí)驗(yàn)結(jié)果:(1) abcdefgh葉子結(jié)點(diǎn)有三個(gè)

45、:d e h 度為1 的結(jié)點(diǎn)有三個(gè):b f g 度為2的結(jié)點(diǎn)有兩個(gè):a c實(shí)驗(yàn)證明代碼正確。(2)123456789葉子結(jié)點(diǎn)有5個(gè):3 5 6 8 9度為1的結(jié)點(diǎn)有0個(gè);度為2的結(jié)點(diǎn)有4個(gè):1 2 4 72.實(shí)驗(yàn)結(jié)果:(1)124365先序遍歷結(jié)果:中序遍歷結(jié)果:后序遍歷結(jié)果:經(jīng)判斷,結(jié)果輸出正確,故代碼正確,能夠滿(mǎn)足實(shí)驗(yàn)要求。(2)12345678先序遍歷結(jié)果:;中序遍歷結(jié)果:;后序遍歷結(jié)果:;8個(gè)結(jié)點(diǎn)的二叉樹(shù)遍歷結(jié)果正確,能夠滿(mǎn)足要求,證明代碼正確。3.實(shí)驗(yàn)結(jié)果:(1)94523向左為0,向右為1,所以哈夫曼編碼為:2: 103: 114: 0輸出正確(2)24945157834左邊這個(gè)4

46、的哈夫曼編碼為:005的哈夫曼編碼為:013的哈夫曼編碼為:100右邊這個(gè)4的哈夫曼編碼為:1018的哈夫曼編碼為:11輸出正確,代碼沒(méi)有錯(cuò)誤。教師評(píng)閱 教師簽名: 年 月 日實(shí)驗(yàn)序號(hào)4實(shí)驗(yàn)名稱(chēng)實(shí)驗(yàn)四 圖的存儲(chǔ)和應(yīng)用實(shí)驗(yàn)地點(diǎn)S-C1303實(shí)驗(yàn)日期2012年 06月 03日 實(shí)驗(yàn)內(nèi)容1圖的遍歷算法的實(shí)現(xiàn)。(閱讀理解圖的遍歷的程序,上機(jī)運(yùn)行并分析結(jié)果。)2用鄰接矩陣法創(chuàng)建一個(gè)有向網(wǎng)。實(shí)驗(yàn)過(guò)程及步驟(代碼)1. #define N 10#define INFINITY 32768#define True 1#define False 0#define Error -1#define Ok 1#inc

47、lude "stdlib.h"#include "stdio.h"typedef enumDG,DN,UDG,UDNGraphKind;typedef char VertexData;typedef struct ArcNode1int adj; ArcNode1;typedef structVertexData vexsN;ArcNode1 arcsNN;int vexnum1,arcnum1;GraphKind kind1;AdjMatrix;/*. */typedef struct ArcNode2int adjvex;struct ArcNode

48、2 *nextarc; ArcNode2;typedef struct VertexNodeVertexData data;ArcNode2 *firstarc;VertexNode;typedef structVertexNode vertexN;int vexnum2,arcnum2;GraphKind kind2;AdjList;/*.*/typedef struct Nodeint data;struct Node *next;LinkQueueNode;typedef structLinkQueueNode *front;LinkQueueNode *rear;LinkQueue;i

49、nt InitQueue(LinkQueue *Q)/*將int EnterQueue(LinkQueue *Q,int x)/*將x插入Q中*/int DeleteQueue(LinkQueue *Q,int *x)/*刪除一個(gè)元素,并用x記錄刪除的元素*/int IsEmpty(LinkQueue *Q)/*判斷鏈表是否為空*/typedef struct node1char data;struct node1 *next;Node1, *LinkList1;typedef struct node2char data1;char data2;struct node2 *next;Node2

50、, *LinkList2;int a2;int visitedN;int LocateVertex1(AdjMatrix *G1,VertexData v)/*查找v返回它的地址*/int CreateUDG1(AdjMatrix *G1,LinkList1 *bt,LinkList2 *br)/*創(chuàng)建鄰接矩陣*/int LocateVertex2(AdjList *G2,VertexData v)/*在G2中查找v,返回它的地址*/int CreateUDG2(AdjList *G2,LinkList1 L,LinkList2 M)/* 創(chuàng)建鄰接鏈表*/void Depth1(AdjMatr

51、ix g1,int vo)/*遍歷鄰接矩陣*/void Depth2(AdjList g2,int vo)/*遍歷鄰解鏈表*/void Breadth1(AdjMatrix g1,int vo)/*輸出G1*/void Breadth2(AdjList g2,int vo)/*輸出G2*/void Traverse1(AdjMatrix g1)/*遍歷G1*/void Traverse2(AdjList g2)/*遍歷G2*/2. /*用鄰接矩陣法創(chuàng)建有向網(wǎng)的算法如下:*/#include "adjmatrix.h"int CreateDN(AdjMatrix *G) /*

52、創(chuàng)建一個(gè)有向網(wǎng)*/ int i,j,k,weight; VertexData v1,v2;printf("輸入圖的弧數(shù)和頂點(diǎn)數(shù)n");fflush(stdin); scanf("%d,%d",&G->arcnum,&G->vexnum); /*輸入圖的頂點(diǎn)數(shù)和弧數(shù)*/ for(i=0;i<G->vexnum;i+) /*初始化鄰接矩陣*/for(j=0;j<G->vexnum;j+)G->arcsij.adj=INFINITY; for(i=0;i<G->vexnum;i+) printf("輸入圖的頂點(diǎn)n");fflush(stdin);scanf("%c",&G->

溫馨提示

  • 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)論