指標和物件的陣列實現

2021-06-26 17:33:48 字數 1829 閱讀 6080

有些語言不支援物件和指標資料型別時,可以數陣列來表示乙個虛擬的鍊錶,指標就是鍊錶的索引,就像鏈式基數排序的關鍵字key的儲存方式,排序時只是改變next的索引,在陣列中的實際位置並沒有改變。下面介紹兩種,表示方法。

1.物件的多陣列表示

陣列key存放該動態集合中的現有關鍵字,陣陣則分別儲存在陣列next和prev中。對於乙個給定的陣列下標x,三個陣列項key[x]、next[x]和prev[x]一起表示鍊錶中的乙個對像,根據這種解釋,陣陣x即為陣列key、next、prev的共同下標。最後乙個物件的next值最好使用(-1)這種不在陣列下標範圍中的數。

2.物件的單陣列表示

由計算機記憶體的編址,可以聯想到,乙個物件在計算機記憶體中佔據一組連續的儲存單元,指標僅僅是該物件所在的第乙個儲存單元的位址,要訪問物件內的其他儲存單元可以在指標上加上乙個偏移量。單陣列表示比較靈活,但管理異構物件是非常困難的,但大多數我們考慮的資料結構都是由同構的元素組成的。

3.物件的分配與釋放

向乙個雙向鍊錶表示的動態集合中插入乙個關鍵字,就必須分配乙個指向該鍊錶表示中尚未利用的物件指標。因此必須對未利用的空間進行管理。下面是多陣列表示的雙向鍊錶的同構物件的分配與釋放。

假設多陣列表示法中的個陣列長度為m,切在某一時刻該動態集合含有n<=m個元素。則n個物件代表現存於該動態集合中的元素。而餘下的m-n個物件是自由的,將這些自有物件儲存在乙個鍊錶中(也是陣列儲存),稱為自由表,自由表僅使用next陣列,因為沒有key,且分配free中的空間時,只從表頭獲取元素。

下面是分別利用棧的形式實現分配與釋放。即只分配棧頂元素,放在鍊錶的表頭(棧頂),釋放的元素放在free表頭。

下面是雙鏈表和自由表交錯的時候:

在寫實現時:注意 key[i]:i位置的關鍵字    next[i]:i位置的下乙個元素  prev[i]:i的前乙個元素的陣列下標。

4.搜尋已排序的緊湊鍊錶的隨機演算法

這個隨機演算法很經典

**如下:

關鍵在於3—8行的隨機演算法,當隨機到的數key[j]>key[i]並且key[j]<=k(因為已排序所以超過了k的範圍),賦給i才是有效的。否則直接取下乙個元素值。當key[j]=k,加個if判斷,若是則返回,若為小於,當然可以再取下乙個。

物件陣列和指標

宣告乙個物件陣列 呼叫單個陣列元素公有成員 a 0 show 陣列名 下標表示式 成員名 動態建立物件陣列 point p new point 動態建立物件,沒有給出引數列表,呼叫預設建構函式 point p new point 保留括號,但沒有給出任何值,表示用0初始化物件 point p new...

C 物件陣列和物件指標

每天的生活從一杯綠茶開始,2月就這麼過去了,時間總是這麼快 1.物件陣列 在實際中,有許多的實體的屬性是共同的額,只有屬性的具體內容不一樣。這個時候我們就需要定義物件陣列,例如 student stud 50 假設已經宣告了student的類。每乙個陣列元素就是乙個student的物件。建立陣列時候...

物件陣列 物件指標 指向物件的指標

1.物件陣列的每乙個元素都是同類的物件 class student private int score int main 三個實參分別傳給陣列的三個建構函式 return 0 2.當資料成員中含有預設引數時 student int 100,int 80,int 90 含有預設引數時 student ...