線性表 鍊錶(二)

2021-07-02 07:41:59 字數 1627 閱讀 3718

一,單鏈表的插入

(1)單鏈表如何插入乙個新元素呢?

在單鏈表中

有序對:

圖例:

注意:在單鏈表中插入只需要修改指標。若要在第 i 個結點之前插入元素,修改的是是第 (i-1) 個結點的指標。

(2)單鏈表的插入元素的**怎麼寫呢?

**如下:

status listinsert(linklist &l, int i ,elemtype e)

if(p && j==i-

1)else

}

分析:在上面這個單鏈表插入元素這個演算法中,l為帶頭結點的單鏈表的頭指標,在鍊錶中第 i 個結點之前插入新的元素 e 。while迴圈的作用是,尋找第(i-1)個結點。

核心演算法:

生成新結點s

s=(linklist)malloc(sizeof(lnode));

為新節點s賦值

s->data=e;

讓s 的next域指向 p 的next域,p就和ai 建立聯絡

s->next=p->next;

讓p next域指向 s 的next域,p又和s 建立了聯絡

p->next=s;

成功插入新節點 e

二,單鏈表的刪除

(1)單鏈表如何插入乙個新元素呢?

在單鏈表中

有序對:

圖例:

注意:在單鏈表中刪除第 i 個結點時,要到單鏈表中第(i-2)個結點,修改其指向後繼的指標。

(2)單鏈表的刪除元素的**怎麼寫呢?

**如下:

status listdelete(linklist &l, int i ,elemtype &e)

if(p->next && j==i-1)else

}

分析:在上面這個單鏈表刪除元素這個演算法中,l為帶頭結點的單鏈表的頭指標,在單鏈表中刪除第 i 個結點元素 。while迴圈的作用是,尋找第(i-1)個結點,並且讓 p 指向它

核心演算法:

讓 q 指向 p 的 next域,防止鏈的斷裂,一旦斷裂,後面的元素就找不到了

q=p->next;

讓 p 指向 q 的next域,其實 p指向的也是是 p 的next 的 next 域

p->next=q->next;

讓 e 儲存 q指向的元素的值,也就是我們要刪除的值,為了安全,我們先要刪除的這個值儲存起來,防止以後使用

e=q->next;

清空結點 q 的記憶體

free(q);

return ok;

圖例:

線性表 鍊錶(二)

單迴圈鍊錶 由上一節的單向鍊錶可知,如果我們想要遍歷鍊錶中的所有元素必須要知道鍊錶的頭結點,通過頭結點開始順著指標鏈依次訪問每個結點,知道最後乙個結點,因此訪問的方式受到了一定的限制,假設我們知道的是鍊錶中的任意乙個結點,那麼,要想訪問單鏈表的所有結點我們該怎麼辦呢?所以我們要引入一種新的鍊錶形式來...

線性表(二) 鍊錶

線性表的鏈式儲存結構生成的表,稱作 鍊錶 鍊錶分為單向鍊錶和雙向鍊錶。單鏈表 singly linked list 是用一組任意的儲存單元存放的線性表元素,這組儲存單元可以連續也可以不連續,甚至可以零散分布在記憶體中的任意位置。為了能夠體現出資料元素之間的邏輯關係,每個儲存單元在在儲存資料元素的同時...

線性表 鍊錶

線性表的adt list.h 線性表的c 抽象類宣告 templateclass list 單鏈表節點的定義 link.h 單鏈表節點類的定義 template class link link link nextval null 鍊錶的實現宣告 成員函式的是實現 鍊錶的實現宣告 include st...