僅供參考:
鍊錶分單向,雙向,迴圈三種。
鍊錶的基本操作包括:順序建表,逆建,結點插入,刪除,鍊錶的合併,拆分等。
順建:需要定義三個結構體指標***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 ...