資料結構 線性表的鏈式表示與實現

2021-07-11 23:01:42 字數 4627 閱讀 9692

上篇一篇部落格中我們介紹了線性表的順序表示與實現:

順序表是按照順序將資料儲存到記憶體之中,雖然訪問方便但是也帶來了一些問題:

1、順序表必須申請一整塊連續的記憶體;

2、插入刪除元素時,當情況最壞時每個元素都要被移動;

這兩個原因導致順序表的效率較低,為解決這兩個問題我們可以使用鏈式儲存的鍊錶來實現線性表:

1、鍊錶是有一種採用動態儲存的結構,可根據需要申請記憶體單元;----解決整塊記憶體不夠的情況;

2、當要插入刪除某個元素時,只需調整前後結點指標即可;-----解決順序表的整體移動問題;

過程分析(以單鏈表為例):

1、定義鍊錶結構:

struct node

*head, *next;

2、單鏈表基本操作:

(1)初始化:

鍊錶為空,返回鍊錶的頭結點指標;

node *initlink()

(2)檢測是否為空:

檢測頭指標是否為空,若為空證明鍊錶為空,否則鍊錶不為空,返回乙個bool型的值;

bool isempty()

(3)新增結點至尾部:

要傳進去乙個資料為結點中包含的資料;

如果鍊錶為空,則令這個新節點為頭結點;

否則,追加到當前結點的後面;

void push(int num)

else

next->next = null;

}

(4)新增結點至指定位置:

需要傳進去兩個引數,要新增的位置int index, 新增的結點資料int num;

先通過遍歷找到相應位置(如果找到最後乙個還沒有到要新增的位置 就可以直接結束):

next

=head;

for(int

i(1);i

next

=next->next;

令標記位結點的指標域指向新結點即可:

next->next

=temp;

這部分完整**如下:
void

addindex(int

index,

intnum)

temp->data

=num;

temp->next

=next->next;

next->next

=temp;

}

(5)、刪除指定結點(按照關鍵字,按照位置均可,此處以關鍵字為例):

要傳入乙個關鍵字,表示要刪除鍊錶關鍵字中與之相等的結點;

如果恰好要刪除的是第乙個頭結點,那直接移動頭結點指標到下乙個元素,然後刪除臨時結點即可;

找到之後,定義乙個臨時的結點存放被找到的結點,然後令當前結點指向被刪除結點的下乙個結點元素,然後刪除那個存有被刪除結點的臨時結點即可;

完整**如下:

void

del(int

num)

else

next

=next->next;

}
}
}
(6)、計算鍊錶長度及輸出鍊錶:

這部分遍歷就好很簡單沒有什麼難的:

長度:

int

length()

return

code;

}

輸出:

void

print()

std::cout

<<

std::endl;

}
關於鍊錶的基本操作我沒有寫查詢,其實查詢的話,我們在刪除那部分已經有所體現出來,就是遍歷時關鍵字的比對,就已經實現了查詢的功能;

實際上鏈式表示與實現中,單戀表是最簡單最簡單的實現,除此之外,還有:

1、迴圈單鏈式:最後乙個結點指標域指向頭結點即可實現,實現長度,輸出等基本操作時將遍歷條件改為當next->next == head 時即可;

等其他比較好玩的鏈式結構,但基本的思想還是跟單鏈式的思想相似。

上面的實現是通過結構體實現鍊錶,其實c++的話類也可以

完整**如下(不包括測試部分函式):

class

link

*head,*next;

public:

link();

void

push(int

num);

void

del(int

num);

void

print();

void

addindex(int

index,

intnum);

intlength();

};
link::link()
void

link::push(int

num)

else

next->next

=null;

}
void

link::del(int

num)

else

next

=next->next;

}
}
}
int

link::length()

return

code;

}
void

link::print()

std::cout

<<

std::endl;

}
void

link::addindex(int

index,

intnum)

temp->data

=num;

temp->next

=next->next;

next->next

=temp;

}

資料結構 線性表 線性表的靜態鏈式表示

資料結構 線性表的靜態鏈式表示 單鏈表 靜態鍊錶 線性表元素序號從1算起 l 0 專設為頭結點 date 2017 4 14 include include define initsize 100 define elemtype char typedef struct lnodelinklist i...

資料結構 線性表的鏈式表示(鍊錶)

下面介紹第二種順序表,也就是鍊錶 鍊錶有兩個,單鏈表和雙鏈表,先介紹單鏈表 include includetypedef struct nodenode,linklist node creatlist1 node head return head void output node head int ...

資料結構 2 線性表的鏈式表示和實現

線性表的鏈式表示和實現 include define ok 1 define error 0 define overflow 2 define maxsize 100 status是函式返回值型別,其值是函式結果狀態 typedef int status elemtype是自定義資料型別 typed...