資料結構3 線性表的鏈式儲存結構(1)

2021-09-10 01:09:08 字數 2648 閱讀 1539

在順序結構中,每個元素只需要儲存元素的資訊就可以,單鏈式結構中因為每個節點的位置在物理上的位置是不確定的,所以在儲存時,需要不僅需要儲存資料資訊還要儲存後繼元素的位置(單鏈表),有的鍊錶不但會儲存後繼節點的位置,還會儲存前驅節點的位置(雙向鍊錶)。一般將儲存資料的部分稱為資料域存放下乙個節點位置的區域叫做指標域,而資料和指標域和起來稱為乙個節點。而鍊錶包含零個(空鍊錶)或多個節點由多個節點。

由於鍊錶中每乙個元素的位置都是在其前驅節點的指標域中儲存,但是第乙個節點是沒有前驅的,所以這是需要乙個指標,幫助記錄第乙個節點的位置,這個變數就被稱為「頭指標」,可以通過這個「頭指標」來遍歷整個鍊錶。而在鍊錶的最後乙個元素是沒有後繼的所以它的指標域為空。

和陣列一樣,對於鍊錶也有很多操作,比如增刪改查等,對於一些特殊的操作對邊界的處理就可能和一般節點的處理不一樣,為了統一這些操作,有時會在頭指標的後面第乙個節點的前面附設乙個節點,稱為頭節點。

這裡需要區分一下頭節點和頭指標的區別:

頭指標頭節點

頭指標是指鍊錶指向第乙個節點的指標,

若煉表有頭節點,則是指向頭節點的指標

頭節點是為了操作的統一和方便而設立的,放在第乙個節點之前,其資料域一般無意義(也可存放鍊錶長度,但要型別合適)

頭指標具有標識作用,所以常用頭指標冠以鍊錶的名字。

有了頭節點,對在第乙個節點之前插入和刪除第一節點的操作就和其他節點相統一了

無論鍊錶是否為空,頭節點一定存在。頭指標是鍊錶的必要元素。

頭節點不一定是鍊錶的必要要素。

單鏈表的定義:

typedef int elemtype;

typedef struct _node

node;

typedef node* linklist;

//在指定位置插入節點(預設時頭插)

bool insertnodepos(linklist* head, elemtype value, int pos = 0);

//在刪除指定位置的節點(預設頭刪)

bool deletenodepos(linklist* head, int pos = 0);

//查詢指定位置的節點(預設查詢第0個元素)

node* getposdata(linklist head, int pos=0);

//修改指定位置的節點的值(預設修改第0個元素的值)

bool makeposdata(linklist* head, elemtype mvalue, int pos = 0);

//展示鍊錶內容

void showlinklist(linklist head);

//獲取指定位置節點前乙個節點的位址

node* getprepos(linklist head,int pos);

//清空鍊錶

void clearlinklist(linklist* head);

在指定位置插入節點(預設時頭插)

bool insertnodepos(linklist* head,elemtype value,int pos)

node* newnode = (node*)malloc(sizeof(node));

newnode->data = value;

if (0 == pos)

else

return true;

}

在刪除指定位置的節點(預設頭刪)

bool deletenodepos(linklist* head,int pos)

node* tnode=null;

if (0 == pos)

else

free(tnode);

tnode = null;

return true;

}

查詢指定位置的節點(預設查詢第0個元素)

node* getposdata(linklist head, int pos)

if (0 == pos)

return p->next;

}

修改指定位置的節點的值(預設修改第0個元素的值)

bool makeposdata(linklist* head, elemtype mvalue, int pos)

if (0 == pos)

else

return true;

}

展示鍊錶內容

void showlinklist(linklist head)

linklist p = head;

while (p)

puts("");

}

獲取指定位置節點前乙個節點的位址

node* getprepos(linklist head, int pos)

linklist p = head;

for (int i = 0; (i < pos - 1) && (p != null); ++i)

return p;

}

清空鍊錶

void clearlinklist(linklist* head)

}

資料結構 鏈式儲存線性表

鏈式儲存結構的線性表 簡稱為鍊錶 將採用一組位址任意的儲存單元存放線性表中的資料元素,鏈式結構的線性表不會按線性的邏輯順序來儲存資料元素,它需要在每乙個資料元素裡儲存乙個引用下乙個資料元素的引用。優點 插入 刪除元素快,充分利用計算機記憶體空間 缺點 查詢元素需要整體遍歷,空間開銷大 單鏈表 cre...

線性表的鏈式儲存 資料結構

為了表示每個資料元素與其直接後繼資料元素之間的邏輯關係,除了儲存本身的資訊之外,還需儲存乙個指示其直接後繼的資訊 即直接後繼的儲存位置 我們把儲存資料元素資訊的位置稱為資料域,把儲存其直接後繼資訊的位置稱為指標域。這兩部分組成資料元素的結點 node 頭結點頭結點是為了操作的統一和方便而設立的,放在...

資料結構 線性表之鏈式儲存結構

資料結構定義 common.h ifndef hi comm h define hi comm h include include include include define list init size 100 線性表儲存空間的初始分配量 define list increment 10 線性表...