堆排序,如果不知道堆的大小,是用陣列建立好還是用連結串列建立好?

2025-03-08 17:25:12 字數 3124 閱讀 6235

1樓:網友

連結串列不適合堆排序演算法, 肯定是陣列好。 要是實在陣列有困難也許可以用二叉樹鏈。

2樓:網友

堆排序的典型演算法的儲存結構是使用一維陣列完成的,用一維陣列操作簡單多啦!

處理資料時,用連結串列好還是陣列要好?

3樓:網友

這個要看具體情況,不能一概而論。

陣列的話,支援隨機訪問,但是如果要插入或刪除元素,就很費勁。

連結串列的話,不支援隨機訪問。你要訪問連結串列中的某乙個元素,必需先訪問其前面的所有元素。但是連結串列能夠很方便快捷地實現插入和刪除元素的操作。

如果你只需要讀寫資料,不需要進行頻繁地元素插入、刪除操作,那麼使用陣列比較好;否則推薦使用連結串列。

4樓:網友

連結串列的操作比較複雜,不過如果資料的多少不確定,而且變化比較大時用連結串列比較好。如果資料較少用陣列好,陣列提前給變數分配的空間,容易造成浪費。

5樓:網友

從效率角度來看,選擇陣列肯定快了。

不管是插入,存取,陣列直接操作記憶體守位址 + 偏移,高效,快。

叢儲存角度來看,資料量多的話,陣列需要預先分配記憶體,比較佔用。

堆排序的堆是怎麼建立的?

6樓:go浪人生

堆排序,也叫二叉堆排序。

完全二叉樹:

1、左右子樹的節點數滿足 ln/rn=1

2、左右子樹高度滿足 rh+1>=lh>=rh3、子節點值統一比父節點大(小)。

最大堆:2叉樹的所有子節點都比父節點小。所以根節點是最大的。

最小堆:2叉樹的所有子節點都比父節點大。所以根節點是最小的。

建堆:假設最多有n個資料。開闢一段用來存這n個資料的空間。

根節點位置為0。其子節點位置為。所有子節點位置與父節點的位置(k)關係:

k,2k+1,2k+2。 假設已經有了n個資料,那麼新資料自然放在n位(因為位置是從0開始),定義乙個函式 shift_up() 用來調整新資料。它的功能是:

將新資料與 (n-1)/2 位置的資料(新資料的父節點)比較,如果比父節點大,那麼就交換,繼續比較,直到它比父節點小。

重新建堆: 當取資料時,就是將根節點取出來。因為根節點是最大的,所以自然還要將其所有子節點進行調整,以保證剩下的資料的根節點是最大的。

方法是:將最後乙個數放到根節點位置(因為根節點取出後,根節點就空了),然後呼叫 shift_down()函式將其與位置的數比較,如果比它大,則交換,然後繼續與2k+1,2k+2位置的比較,直到這兩個位置的數都比它小。

7樓:逸明鯨人

先將元素按順序插入陣列 形成完全二叉樹 然後按照定義對二叉樹內元素即陣列元素進行調整 初始化堆 使陣列內元素滿足 (以小根堆為例)a[x]<=a[x*2]且a[x]<=a[x*2+1] 如有什麼不懂得 還可以問我。

8樓:nba週報

根據堆的概念,使用一維陣列即可建立,關鍵在於建立堆得演算法。

9樓:匿名使用者

堆排序確實比較難理解,不知你用的是哪本書?

求指教乙個用陣列建立單連結串列 然後輸出的問題

10樓:網友

press any key to continue#include

typedef struct node lnode;

lnode *creat_linklist(int a,int n)s->next = null; /尾結點next域置為nullreturn head; /返回頭指標。

void disp_linklist(lnode *l)else q = q->next;

p = p->next;

int main() 定義整型陣列,並賦初值*/lnode *l = creat_linklist(a,20); 用陣列建立單連結串列。

disp_linklist(l);

pur_linklist(l); 刪除重複結點disp_linklist(l);

return 0;

資料結構中的堆和作業系統裡的堆不一樣為什麼都叫堆呢?

11樓:蘇遇求職記

資料結構中的堆:

堆實際上指的就是(滿足堆性質的)優先佇列的一種資料結構,第1個元素有最高的優先權。

嚴蔚敏的資料結構中介紹的堆是在堆排序中。把堆頂元素與最後乙個元素替換,然後輸出最後乙個元素(即交換前的堆頂);然後調整堆。)

堆性質:葉子節點小於(或大於)父親節點,則為小(大)頂堆。

資料結構中的堆可以用乙個陣列來儲存(完全二叉樹結構。)作業系統中的堆:

這裡的堆是屬於記憶體分配方式的一種:動態分配記憶體。

實現的方式更接近於連結串列。堆記憶體中有很多塊記憶體,可能不是連續的。所有需要用連結串列來組織。

在分配的時候,有多種策略。

首先查詢是否有空閒的並且滿足大小的堆記憶體,然後把最大的那塊給需求者。

這裡有點像資料結構中堆的優先權。

詳細介紹。

是不是所有的資料結構都可以用基於陣列或者基於連結串列的方式來儲存和表示?

12樓:網友

陣列一但定義,大小就不能改變了,但陣列可以隨機存取,只要寫出下標就可以了,適合頻繁隨機存取資料的情況連結串列可以靈活地增加長度,只需要指標指向下乙個元素即可,但是存取資料的時候要從頭開始找,適合遍歷之類。

編寫乙個程式,要求能完成排序和查詢,分別使用連結串列,陣列和二叉樹等資料結構,比較各種方法的優缺點。

13樓:網友

思路很copy簡單,根放在0位置,以後假定當前位置是i,那麼左子結點在2i+1,右子結點在2i+2。比如根的左子結點在1,右子結點在2。結點1的左子結點在3,右子結點在4。

定義一種空值表示沒有子結點,比如empty。

假定乙個結點由3個成員組成:value, left, right陣列假定是全域性的,如果不是可以作為引數傳送。

遞迴實現比較簡單:

void btree2array(node, index)開始呼叫的時候就一句話:

btree2array(root, 0);

我是打算養牛的,不知道現在如果養50 100頭牛需要蓋什

有三種牛棚設計。有的是效果圖,有的是圖紙。一 牛圈舍佈局 設計說明 飼養牛100頭 二 封閉式牛舍單體建築效果圖 設計說明 長27米,寬10.2米 或9.4 米,單獨飼養牛50頭。主要優點 保暖效能好,適合海拔較高,氣溫較低的地方。三 暖棚式牛舍單體建築效果圖 設計說明 飼養牛100頭,雙棟設計,單...

我是個26歲的大小夥子,想做點小生意,不知道做什麼好,迷茫中

做早餐,也要選擇自己會做的早餐,比如包子,你要會做,就不用僱人,再來些小米粥,黑米粥,綠豆粥,小鹹菜,熗拌菜配著包子給顧客用,當然包子餡料要品種豐富,純豬肉的,純牛肉的,魚丸的,韭菜雞蛋,白菜粉條,西葫蘆雞蛋,青椒豬肉,芹菜豬肉,牛肉蘿蔔,酸菜豬肉,酸菜粉條,還有野菜類的,薺菜豬肉,赤蒿棒豬肉,小葉...

臉上有雀斑,是乾性面板,不知道用那種牌子的遮瑕好呢

最有效的祛斑方式應該是分析自身色斑形成的原因進行去除。也就是科學的祛斑方式。祛斑單單隻依靠一種祛斑產品是不能夠把色斑去除的,首先要分析身子色斑形成的具體原因,根據色斑形成的原因選擇適合自己的祛斑方式和正規的祛斑產品才是科學的祛斑方式。想要徹底的祛斑,首先要知道斑是怎麼形成的,從問題的根源出發,才能更...