C語言資料結構題,求大佬解答,萬分感謝

2021-03-19 18:21:33 字數 1532 閱讀 1603

1樓:哈米哈達

之前儲存的

原始碼:#include

#include

typedef int elemtype;

struct btreenode

;//1、輸出二叉樹,可在前序遍歷的基礎上修改。採用廣義**式,元素型別為int

void printbtree_int(struct btreenode* bt)}}

//2、根據陣列 a 中 n 個權值建立一棵哈夫曼樹,返回樹根指標

struct btreenode* createhuffman(elemtype a, int n)

for (i = 1; i < n; i++)//進行 n-1 次迴圈建立哈夫曼樹

if (b[j] != null)

}for (j = k2; j < n; j++)//從當前森林中求出最小權值樹和次最小

else if (b[j]->data < b[k2]->data)

k2 = j;}}

//由最小權值樹和次最小權值樹建立一棵新樹,q指向樹根結點

q = malloc(sizeof(struct btreenode));

q->data = b[k1]->data + b[k2]->data;

q->left = b[k1];

q->right = b[k2];

b[k1] = q;//將指向新樹的指標賦給b指標陣列中k1位置

b[k2] = null;//k2位置為空

}free(b); //刪除動態建立的陣列b

return q; //返回整個哈夫曼樹的樹根指標

}//3、求哈夫曼樹的帶權路徑長度

elemtype weightpathlength(struct btreenode* fbt, int len)//len初始為0

}//4、哈夫曼編碼(可以根據哈夫曼樹帶權路徑長度的演算法基礎上進行修改)

void huffmancoding(struct btreenode* fbt, int len)//len初始值為0

else//訪問到非葉子結點時分別向左右子樹遞迴呼叫,並把分支上的0、1編碼儲存到陣列a}}

//主函式

void main()

a = malloc(n*sizeof(elemtype));

printf("從鍵盤輸入%d個整數作為權值:", n);

for (i = 0; i < n; i++)

scanf(" %d", &a[i]);

fbt = createhuffman(a, n);

printf("廣義表形式的哈夫曼樹:");

printbtree_int(fbt);

printf("\n");

printf("哈夫曼樹的帶權路徑長度:");

printf("%d\n", weightpathlength(fbt, 0));

printf("樹中每個葉子結點的哈夫曼編碼:\n");

huffmancoding(fbt, 0);

}來自yaoowei2012

C語言資料結構求解,c語言常見的資料結構有哪些

如上圖,把k位置的資料刪除後,需要把k後面的元素逐個向前移動一次。一共是n個元素,k前面 包括k 一共是k個元素,剩下需要移動的就是n k個元素。答案選a 需要移動k 1 k 2。一直到n的元素,所以次數是n k 1 1 c語言常見的資料結構有哪些?1 線性資料結構 元素之間一般存在元素之間存在一對...

資料結構(c語言)

我知道只要設計函式就可以了,但為便於你理解,還是把連結串列的整個程式貼上去吧。其實連結串列不難,碰到複雜的,或看別人的連結串列程式,最重要的是要邊看邊畫圖,把關係表示出來。include include typedef int elemtype typedef struct lnode lnode,...

c語言資料結構時間複雜度,C語言,資料結構中演算法的時間複雜度

1 因為抄f n 和g n 在n趨於 無窮大時襲為n 3階,h n 為n 1.5因此 1 f n o g n 2 g n o f n 3 h n o n 1.5 都正確bai,第 4 不對,du因為nlgn 的無窮zhi 大階次比n 1.5低,h n 趨於無窮大時dao被忽略了3 從優到劣也就是從階...