鍊錶知識體會總結(僅供參考)

2021-08-25 14:23:06 字數 1684 閱讀 1434

僅供參考:

鍊錶分單向,雙向,迴圈三種。

鍊錶的基本操作包括:順序建表,逆建,結點插入,刪除,鍊錶的合併,拆分等。

順建:需要定義三個結構體指標***head, t, p

。申請頭結點head----head->next=null----t=head

下面插入結點:p->next=null----t->next=p----t=p;(尾節點要一直指向當前最後結點)。

逆序建鍊錶:定義兩個結構體指標****head, *p。***讓頭結點一直指向當前最後乙個結點,這樣當所有結點插入完成以後就可以從最後乙個結點逆序訪問輸出(每插入乙個結點p,最後一條指令都是head->=p,讓頭指標指向當前結點)

繼而,當插入下乙個結點p時,因為head->要指向當前的p,所以要將head與上乙個p分開,但是,在分開之前,要讓當前的p記下上乙個p的位址,即:p->next=head->next(上乙個p的位址已經由head->記下),然後,就可以放心地讓head->指向當前的p了。

固建完頭結點後的**為:

p->next=head->next;

head->next=p;

插入結點:

下面是給乙個空表插入結點的**

void insert(int a,int b)

q=.......;//申請空間

q->data=a;//給p的資料域賦值a.

q->next=p->next;

p->next=q;

len++;//總結點數加一。

若是在乙個不是空的鍊錶插結點,只需要找到要插入的位置然後插進去即可,若要在某個數後面插入結點與在第n個結點後(與上面**差不多)插入結點,操作稍微有點不同。

下面直寫在某個數後面插結點:

p=head->next;

while(p!=null)

else p=p->next; }

return head;

刪除結點: //此處未完待續…

p=q->next;

首先找到利用游動指標q找到要刪除的點,然後p->next=q->next

拆分:假設要將乙個表按奇偶性分成兩個表

void sp(struct st*h)   //不需要返回值的都用void.本題若用return返回頭指標的方法是不行的,因為return只能返回乙個值。所以乾脆把h1,h2變成全域性變數,這樣主函式和自定義函式都能直接使用。

else

}t1=null;t2=null; //次處不可少,做事情都要有始有終哦。

}

合併:

這裡寫**片struct st *he(strucct st*h1,struct st *h2)

}if(p1) //執行完上面的while後,必定有乙個鍊錶為空了,或者兩個都空了。若p1還不空, 把p1後面的結點一塊都接在t的後面。

else t->next=p2;

return head; //把合併後的頭指標返回。

}

雙向鍊錶知識總結

雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。一般我們都構造雙向迴圈鍊錶。typedef struct node dlinklist int init dlinklist ...

資料結構 鍊錶 鍊錶00 鍊錶知識點總結

鍊錶是一種動態結構,建立鍊錶時,無須知道鍊錶長度,插入乙個節點時,只需為新節點分配記憶體,然後調整指標。struct listnode void insertnode listnode phead,int data phead頭指標 else 鍊錶記憶體不是連續的,所以找第i個節點時,需要從開頭遍歷...

個人總結的一些鍊錶知識

總結了一些鍊錶的知識,包括鍊錶建立,反序,逆序輸出,解決約瑟夫環 報數問題 include include using namespace std typedef struct node node,pnode 建立鍊錶 node creat int n pnode start new node t ...