3寫出下列稀疏矩陣的三元組表。4已知一棵完全二叉樹中共

時間 2021-08-11 16:21:07

1樓:匿名使用者

3 寫出下列稀疏矩陣的三元組表。

未給出稀疏矩陣

4 已知一棵完全二叉樹中共有1980個節點,則該樹中共有多少個葉子接點。

設該樹有k層, 則結點總數 2^(k+1) -1 >=1980

k+1 >10

k>9k=10

從第0層到第9層共有 2^(9+1) -1=1023個結點, 第9層有 2^9 = 512個結點, 如果是滿二叉樹, 則第10層應有512*2=1024個結點, 但現在只有1980-1023 =957個結點, 即第9層中只有957/2=479個結點有孩子, 512-479 = 33個結點是葉子結點, 第10層有957個葉子結點, 一共有33+957 = 990個葉子結點

5 已知二叉樹的前序序列和中序序列分別為abcdefghijk和cdbgfeahjik,畫出這棵二叉樹。

ab                       h

c              e                    i

d       f                   j       k

g6 已知一個無向圖g的頂點集e(g)=,其鄰接矩陣如圖所示:

1 0 0 1  0

0 0 0 1 1

0 1 1 0 1

1 0 1 1 0

(1)畫出該圖的圖形

見**(2) 寫出從頂點a出發進行深度優先遍歷和廣度優先遍歷的遍歷序列。

深度優先遍歷: a b d c e

廣度優先遍歷: a b e d c

7  假設用於通訊的電文由字符集中的字元組成,這8個字元在電文中出現的頻率分別是0.07,0.19,0.

02,0.06,0.32,0.

03,0.21,0.10。

畫出相應的哈夫曼樹,併為這8個字元設計哈夫曼編碼。

哈夫曼樹見圖

a:  0010

b: 10

c: 00000

d: 0001

e: 01

f: 00001

g: 11

h: 0011

2樓:匿名使用者

一看就是選修課題 太簡單了 自己做吧 水利學院的吧啊

一看就是網路a091的

c語言資料結構(考題,測試你的能力)--編寫源**

3樓:匿名使用者

p88 稀疏矩陣十字連結串列相加演算法如下:

/*假設ha為a稀疏矩陣十字連結串列的頭指標,hb為b稀疏矩陣十字連結串列的頭指標*/

#include

#define maxsize 100

struct linknode

k;};

struct linknode creatlindmat( ) /*建立十字連結串列*/

cp[s]->k.next=hm;

for( x=1;x<=t;x++)

return hm;

}/* ha和hb表示的兩個稀疏矩陣相加,相加的結果放入ha中*/

struct linknode *matadd(struct linknode *ha, struct linknode *hb)

ca=ha->k.next; cb=hb->k.next;

while(ca->i==0)

else if ((pa->j>pb->j)||(pa->j==0)) /*插入一個結點*/

hl[j]->cptr=p; p->cptr=q;

hl[j]=p;

}else

hl[j]->cptr=q->cptr;

pa=pa->rptr; pb=pb->rptr;

free(q);

}else}}

ca=ca->k.next; cb=cb->k.next;}}

return ha;

}void print(struct linknode *ha) /*輸出十字連結串列*/

if(p!=q)

printf("%3d%3d%3d",q->i,q->j,q->k.v);

printf("\n");

p=p->k.next;

}q=p->rptr;

while(q->rptr!=p)

if(p!=q)

printf("%3d%3d%3d",q->i,q->j,q->k.v);

printf("\n");

}void main()

p94 資料型別描述如下:

#define elemtype char

struct node1

ds;}p95 資料型別描述如下:

struct node2

p96 求廣義表的深度depth(ls)

int depth(struct node1 *ls)

ls=ls->link;

}return max+1;

}p96 廣義表的建立creat(ls)

void creat(struct node1 *ls)

else

scanf("%c",&ch);

if(ls==null);

else if(ch==',')

creat(ls->link);

else if((ch==')')||(ch==';'))

ls->link=null;

}p97 輸出廣義表print(ls)

void print(struct node1 *ls)

else

printf("%c ",ls->ds.data);

if(ls->atom==0)

printf(")");

if(ls->link!=null)

}p98 該演算法的時間複雜度為o(n)。整個完整程式如下:

#include

#define elemtype char

struct node1

ds;};void creat(struct node1 ls) /*建立廣義表的單連結串列*/

else

scanf("%c",&ch);

if(ls==null);

else if(ch==',')

creat(ls->link);

else if((ch==')')||(ch==';'))

ls->link=null;

}void print(struct node1 ls) /*輸出廣義單連結串列*/

else

printf("%c",ls->ds.data);

if(ls->atom==0)

printf(")");

if(ls->link!=null)

}int depth(struct node1 ls) /*求廣義表的深度*/

ls=ls->link;

}return max+1;

}main()

第六章 樹

p109 二叉連結串列的結點型別定義如下:

typedef struct btnode

tnodetype;

p109 三叉連結串列的結點型別定義如下:

typedef struct btnode3

tnodetype3;

p112 c語言的先序遍歷演算法:

void preorder (tnodetype *t)

/*先序遍歷二叉樹演算法,t為指向根結點的指標*/

}p113 c語言的中序遍歷演算法:

void inorder(tnodetype *t)

/*中序遍歷二叉樹演算法,t為指向根結點的指標*/

}p113 c語言的後序遍歷演算法:

void postorder(tnodetype *t)

/*後序遍歷二叉樹演算法,t為指向根結點的指標*/

}p114 如果引入佇列作為輔助儲存工具,按層次遍歷二叉樹的演算法可描述如下:

void levelorder(tnodetype *t)

/*按層次遍歷二叉樹演算法,t為指向根結點的指標*/

while (front!=rear)

if (t->rch!=null) /*t的右孩子不空,則入隊*/}}

p115 以中序遍歷的方法統計二叉樹中的結點數和葉子結點數,演算法描述為:

void inordercount (tnodetype *t)

/*中序遍歷二叉樹,統計樹中的結點數和葉子結點數*/

}p115 可按如下方法計算一棵二叉樹的深度:

void preorderdeep (tnodetype *t,int j)

/*先序遍歷二叉樹,並計算二叉樹的深度*/

}p117 線索二叉樹的結點型別定義如下:

struct nodexs

p117 中序次序線索化演算法

void inorderxs (struct nodexs *t)

/*中序遍歷t所指向的二叉樹,併為結點建立線索*/

/*建立t所指向結點的左線索,令其指向前驅結點pr*/

if (pr!=null)

} /*建立pr所指向結點的右線索,令其指向後繼結點p*/

pr=p;

inorderxs (t->rch);}}

p118 在中根線索樹上檢索某結點的前驅結點的演算法描述如下:

struct nodexs * inpre (struct nodexs *q)

/*在中根線索樹上檢索q所指向的結點的前驅結點*/

return (p);

}p119 在中根線索樹上檢索某結點的後繼結點的演算法描述如下:

struct nodexs * insucc (struct nodexs *q)

/*在中根線索樹上檢索q所指向的結點的後繼結點*/

return (p);

}p120 演算法程式用c語言描述如下:

void sortbt(bt *t,bt *s) /*將指標s所指的結點插入到以t為根指標的二叉樹中*/

p121 二叉排序樹結點刪除演算法的c語言描述如下:

void delnode(bt,f,p)

/*bt為一棵二叉排序樹的根指標,p指向被刪除結點,f指向其雙親*/

/*當p=bt時f為null*/

/*尋找s結點*/

if (q=p)

q->lch=s->lch;

else q->rch=s->lch;

p->data=s->data; /*s所指向的結點代替被刪除結點*/

dispose(s);

fag=1;

}if (fag=0) /*需要修改雙親指標*/

}第七章 圖

p134 用鄰接矩陣表示法表示圖,除了儲存用於表示頂點間相鄰關係的鄰接矩陣外,通常還需要用一個順序表來儲存頂點資訊。其形式說明如下:

# define n 6 /*圖的頂點數*/

# define e 8 /*圖的邊(弧)數*/

typedef char vextype; /*頂點的資料型別*/

typedef float adjtype; /*權值型別*/

typedef struct

graph;

p135 建立一個無向網路的演算法。

creatgraph(ga) /*建立無向網路*/

graph * ga;

} /*creatgraph*/

p136 鄰接表的形式說明及其建立演算法:

typedef struct node

edgenode; /*邊表結點*/

typedef struct

vexnode; /*頂點表結點*/

vexnode ga[n];

creatadjlist(ga) /*建立無向圖的鄰接表*/

vexnode ga[ ];

} /* creatadjlist */

p139 分別以鄰接矩陣和鄰接表作為圖的儲存結構給出具體演算法,演算法中g、g1和visited為全程量,visited的各分量初始值均為false。

int visited[n] /*定義布林向量visitd為全程量*/

graph g; /*圖g為全程量*/

dfs(i) /*從vi+1出發深度優先搜尋圖g,g用鄰接矩陣表示*/

int i;

} /* dfsl */

p142 以鄰接矩陣和鄰接表作為圖的儲存結構,分別給出寬度優先搜尋演算法。

bfs(k) /*從vk+l出發寬度優先搜尋圖g,g用鄰接矩陣表示,visited為訪問標誌向量*/

int k;

;visited[p - >adjvex]=true;

enqueue(q,p - >adjvex); /*訪問過的頂點入隊*/

}p=p - >next; /*找vi+l的下一個鄰接點*/}}

} /*bfsl*/

p148 在對演算法prim求精之前,先確定有關的儲存結構如下:

typdef struct

edge;

float dist[n][n]; /*連通網路的帶權鄰接矩陣*/

edget[n-1]; /*生成樹*/

p149 抽象語句(1)可求精為:

for(j=1;jdist[k]+cost[k][j]))

} /*所有頂點均已加入到s集合中*/

for (j=0;j(a[i][k]+a[k]

請用英語寫出下列節日的日期,用英語寫出下列節日的日期

新年january first 61兒童節june first 植樹節march fourteenth 教師節september tenth 愚人節april first 勞動節may first 國慶節october first 聖誕節december twenty fifth建軍節august ...

寫出下列詞語的反義詞或近義詞,寫出下列詞語的近義詞和,反義詞

張勝燕 反義詞 沉甸甸 輕飄飄 低吟 高喊 可愛 厭惡 明白 糊塗 遙遠 臨近 遠離 緊靠 準確 錯誤 清楚 混亂 愚蠢 睿智 恭謙 驕橫 懲罰 獎賞 忠告 誣告 靜止 移動 碩大 渺小 壯闊 狹窄 自命不凡 自慚形穢 整潔 雜亂 平凡 偉大 平靜 熱鬧 清香 惡臭 富貴 貧賤 埋沒 發現 迷惑 清...

寫出下列轉化的化學方程式,寫出下列轉化的化學方程式 CuCl 2 Cu CuO CuSO 4 Cu(OH) 2 CuCl

2kclo3 加熱mno2 2kcl 3o2 2p 5o2 點燃 2p2o5 2kmno4 加熱 k2mno4 mno2 o2 o2 2h2 點燃 2h2o 2h2o 通電 2h2 o2 2o2 3fe 點燃 fe3o4 2kclo3 mno2,加熱 2kci 3o2 氣體 寫出下列轉化的化學方程式...