資料結構複習之開題篇(持續更新)

2022-06-14 16:27:12 字數 3307 閱讀 2631

在複習資料結構之前有必要複習一下c語言的指標

int*p;

乙個指標型別,名為p,代表的是乙個整形所存放的位址編號

1.1乙個使用的例項

【注】對變數使用&操作符,意為取它所在的位址

1 #include 2

3int

main()

4

1.2乙個容易搞混的東西

int* p =null;

意為對指標p賦值為null,而不是對*p賦值

1.3指標的算術運算

假設p是乙個指向位址為1000的整形指標,是乙個32位整數

讓我們對該指標執行下列的算術運算:

p++;在執行完上述的運算之後,p 將指向位置

1004,因為 p 每增加一次,它都將指向下乙個整數字置,即當前位置往後移 4 個位元組。這個運算會在不影響記憶體位置中實際值的情況下,

移動指標到下乙個記憶體位置。如果 p 指向乙個位址為 1000 的字元,上面的運算會導致指標指向位置 1001,因為下乙個字元位置是在 1001

1.3.1遞增乙個指標

1

當乙個指標指向乙個陣列時,當遞增該指標時,表示指向陣列的下一項

2 #include 3

4const

int max = 3;5

6int

main ()7;

9int i, *ptr;

1011

/*指標中的陣列位址

*/12 ptr = var;13

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

1422

return0;

23}2425

/*輸出的結果為

*/27 儲存值:var[0] = 10

29 儲存值: var[1] = 100

31 儲存值:var[2] = 200

1.3.2指標的比較

指標可以用關係運算子進行比較,如 ==、< 和 >。如果 p1 和 p2 指向兩個相關的變數,比如同乙個陣列中的不同元素,則可對 p1 和 p2 進行大小比較

下面的程式修改了上面的例項,只要變數指標所指向的位址小於或等於陣列的最後乙個元素的位址 &var[max - 1],則把變數指標進行遞增

1 #include 2

3const

int max = 3;4

5int

main ()6;

8int i, *ptr;910

/*指標中第乙個元素的位址

*/11 ptr = var

;12 i = 0;13

while ( ptr <= &var[max - 1] )

1423

return0;

24 }

1.儲存結構分為=>(順序儲存結構,鏈式儲存結構),資料的儲存結構是指=>資料的邏輯結構在計算機中的表示。

所以要區分,順序就是順序,鏈式就是鏈式

2.「堆」是順序儲存=>雖然堆是二叉樹方式,但是在編寫**時只能以順序表示

3.迴圈佇列只能順序儲存(????why,迴圈佇列不是可以用鍊錶表示嗎)

1.線性表是n個具有相同特性的資料元素的有限序列,可以為空。有直接前驅和後繼。是乙個邏輯結構

注意區別:

陣列就是相同資料型別的元素按一定順序排列的集合。

一句話:就是物理上儲存在一組聯絡的位址上。也稱為資料結構中的物理結構。

線性表中資料元素之間的關係是一對一的關係,即除了第乙個和最後乙個資料元素之外,其它資料元素都是首尾相接的。

一句話:線性表是資料結構中的邏輯結構。可以儲存在陣列上,也可以儲存在鍊錶上。

線性表的結點按邏輯次序依次存放在一組位址連續的儲存單元裡的方法。用順序儲存方法儲存的線性表簡稱為順序表。

一句話:用陣列來儲存的線性表就是順序表。

總結:你被這幾個概念混淆,是因為你沒搞懂資料結構裡的邏輯結構和物理儲存結構。

我的總結:

線性結構:有直接的前驅後繼

非線性結構:比如圖,樹,廣義表。這組概念是邏輯上的,是邏輯結構。

鏈式儲存:可以跳躍的占用空間,有隨機性

例如二叉樹在邏輯上是非線性的,但是在計算機上可以順序儲存(陣列模擬二叉樹),也可以鏈式儲存(二叉鍊錶)。a

演算法之單鏈表的就地逆置:要求空間複雜度為o(1)。

1

void reverse_l(linklist &l)28

while(l->next !=p)

915 }

1

function

swap(h, a, b) 67

//調整第lo個節點的堆結構,並向下遞迴調整

8function

heapadjust(h, lo, hi)

17 h[lo] =temp;18}

1920

//堆排序

21function

heapsort(h)

27//

開始堆排序

28//

大小大29

//小大小

30for (let i = 1; i < range; i++) 35}

3637 let array = new

array();

3839

for (let i = 0; i < 10000000; i++) array.push(math.round(math.random() * 100 + 1));

4041

經測試陣列提供的原生sort函式應該是快速排序沒有我寫的快

42//

console.log(array);

43heapsort(array);

44//

console.log(array);

view code

1

//順序儲存結構,起始為1,結束為n

2void insertelement(datatype heap, datatype e, int

n) 12

}13 heap[j] =e;

14 }

資料結構複習之開題篇(持續更新)

在複習資料結構之前有必要複習一下c語言的指標 int p 乙個指標型別,名為p,代表的是乙個整形所存放的位址編號 1.1乙個使用的例項 注 對變數使用 操作符,意為取它所在的位址 1 include 2 3int main 41.2乙個容易搞混的東西 int p null 意為對指標p賦值為null...

筆試總結 資料結構篇 持續更新

1.單鏈表的沒個節點都具有唯一的前驅節點和唯一的後繼節點,所以當兩個單鏈表存在相交的節點時,這兩個鍊錶則同時擁有這個節點,以及這個節點的所有後繼節點,當這個公共節點是尾節點時,他們則只含有公共乙個節點 尾節點。2.快慢指標是判斷單鏈表是否有環的一種方法 兩個指標,每次移動的步長為2叫做快指標,每次移...

考研資料結構題目 樹(持續更新)

在度為4的樹中,若有20個度為4的節點,10個度為3的節點,1個度為2的節點,10個度為1的節點,則樹t的葉節點個數是?這道題是2010年計算機聯考真題。我用手算 半蠻力 解出答案是82,結果是對的,但是耗時較長,而且如果數字再大點也不好算了,因此肯定存在一種更加高效的方法。我們知道,於是樹的節點個...