資料結構 表(1)

2021-09-02 19:28:10 字數 2823 閱讀 3492

注:本文為根據《資料結構與演算法分析》一書所做筆記與理解

我們稱大小為0的表為空表

除空表外的任何表(a1 , a2 , a3 , …… , an),我們說 ai+1 後繼 ai (或繼 ai 之後)並稱 a i-1 (i < n)前驅a i ( i > 1)。

元素 ai 在表中的位置為i。

接下來,介紹要在表adt中進行的操作:

printlist:列印表

makeempty:清空表

find:返回關鍵字首次出現的位置

insert:從表的某個位置插入某個關鍵字

delete:從表的某個位置刪除某個關鍵字

如果用陣列來實現表這個資料結構,列印、清空、查詢元素還好說。但是,如果要插入乙個元素在某個位置,那就得從這個位置開始,後面的元素全部往後挪一位。同樣的,如果要在某個位置刪除乙個元素,就得從這個位置開始,後面的元素全部往前挪一位。這也太麻煩了。另外,在定義資料結構的時候,還需要預估一下這個表的大小,從而初始化陣列的大小。

由於這些原因,我們一般不用陣列。

為了避免插入和刪除時的移動操作,考慮使用指標。這樣,表中的元素就可以不用連續儲存,隨便放在記憶體中的哪個位置,只要通過指標指過去就可以了。

鍊錶中每個j節點包括兩部分——值和指向下乙個節點的指標(即下乙個j節點的位址)。

有可能存在的問題是:如果我們刪掉了第乙個元素,或者在第乙個元素前面再插入了乙個元素,這樣,我們的首元素的指標就會發生變化。因此,一般來說,我們會流出乙個標誌節點——表頭。表頭不儲存任何值,只是為了保證鍊錶的第乙個節點一直不變。

以int型元素為例,放上c++**

class node

node

(int x)

node

(int x , node* next)

};

class list

list

(node* node)

//其他一些成員函式

……};

新增一些輔助的成員函式:

//清空鍊錶 

void

makeempty()

//判斷是否為空

bool isempty()

//判斷當前是否為鍊錶結尾

bool islast()

//移動到表頭

void

tohead()

//往後移動一位

void

tonext()

//往前移動一位

void

topre()

對於printlist或find操作,只需要從表頭的指標開始,依次獲取下乙個,下下個……節點的指標即可。

//列印鍊錶 

void

print()

cout << endl;

cur = t;

}

//查詢元素,返回位置,沒有找到返回-1

intfind

(int k)

++pos;

}return-1

;}

對於刪除元素,只需要從要刪除的節點那裡修改乙個指標即可。如下圖,以要刪除節點3為例

先令當前節點的指標(cur指標)指向要刪除的節點的前乙個節點,即節點2

然後將節點2的next指標直接指向節點4即可。這樣,在鍊錶中,就沒有節點3這個結構了。

相應**如下:

//刪除值為k的元素 

void

deletenode

(int k)

cur = t;

}//找到值為k的節點的前驅節點

void

findprevious

(int k)

}

對於插入元素,只需要新建乙個新的節點,將其插入相應的位置,只需要修改兩個指標。以下圖中鍊錶為例,在節點2和節點4之間插入新的節點3.

首先,令當前節點指標(cur指標)指向要插入的位置的前乙個節點,然後新建乙個節點。新建這個節點的值為要插入的值,next指標為插入位置的下乙個節點的位址(即節點4的位址)

然後,將cur節點的next指標指向新節點即可。

**就很簡單了,假設已經將cur指標移動到了指定位置,只需新建節點並修改相應的next指標即可。

//在當前位置插入值為k的元素

void

insert

(int k)

資料結構 1 順序表

資料結構的基礎知識 1968年美國克努特教授開創了資料結構的最初體系 資料結構是指資料的邏輯結構和儲存結構及其操作 資料結構是一門綜合性的專業客場,是一門介於數學 計算機硬體 計算機軟體之間的一門核心課程。是設計和實現編譯系統 作業系統 資料庫系統及其他系統程式和大型應用程式的基礎 資料的邏輯結構 ...

資料結構 1 順序表

目錄 順序表1.順序表的概念及結構 2.特點 3.動態順序表的實現 3.1 順序表初始化 3.2 順序表銷毀 3.3 順序表列印 3.4 檢查空間,如果滿了,進行增容 3.5 順序表尾插 3.6 順序表尾刪 3.7 順序表頭插 3.8 順序表頭刪 3.9 順序表查詢 3.10 順序表在pos位置插入...

資料結構 1 順序表

線性表 具有相同資料型別的n n 0 個資料元素的有序序列 函式中定義的陣列位於棧段,系統棧大小ulimit s8192 8mb 棧段存管理節點位址,管理節點 資料都在堆段 結構操作 增刪改查 刪除指當前記憶體可以被占用,如果被覆寫就找不回來了 include include include inc...