typedef的用法
case 1
#include
typedef
int zhagnsan;
//為int再重新多取乙個名字,zhagnsan等價於int
typedef
struct student
st;int
main
(void
)
case 2
#include
typedef
int zhagnsan;
//為int再重新多取乙個名字,zhagnsan等價於int
typedef
struct student
*pst;
//pst等價於struct student *
intmain
(void
)
case 3
#include
typedef
int zhagnsan;
//為int再重新多取乙個名字,zhagnsan等價於int
typedef
struct student
*pstu,stu;
//pstu等價於struct student *,stu代表了struct student
intmain
(void
)
鍊錶的定義
定義:
n個節點離散分配;彼此通過指標相連;每個節點只有乙個後續節點,首節點沒有前驅節點,尾節點沒有後續節點。
專業術語:
首節點:第乙個有效節點
尾節點:最後乙個有效節點
頭節點:頭節點的資料型別和首節點的資料型別相同。第乙個有效節點之前的那個節點;頭節點並不存放存放有效資料;加頭節點的目主要是為了方便對鍊錶的操作。
頭指標:指向頭節點的指標變數
尾指標:指向尾節點的指標變數
頭節點-首節點。。。。。。尾節點【頭節點並沒有儲存有效資料,也沒有存放鍊錶中有效節點的個數。首節點開始存放有效資料。在鍊錶前邊加乙個沒有實際意義的頭節點,可以方便對鍊錶的操作。頭節點於之後節點的資料型別相同】
如果希望通過乙個函式來對鍊錶進行處理,我們至少需要接受鍊錶的哪些引數
如果希望通過乙個函式來對鍊錶進行處理,我們至少需要接受鍊錶的哪些引數
只需要乙個引數:頭指標
因為我們通過頭指標可以推算出鍊錶的其他所有引數
每乙個鍊錶節點的資料型別該如何表示的問題
case 1
#include
typedef
struct node
node,
*pnode;
//node等價於struct node,pnode等價於struct node *
intmain
(void
)
鍊錶的分類
分類:單鏈表:每個鍊錶的指標域只能指向後面的節點
雙鏈表:每乙個節點有兩個指標域
迴圈鍊錶:能通過任何乙個節點找到其他所有的結點
非迴圈鍊錶:
非迴圈單鏈表插入節點偽演算法講解
演算法:遍歷
查詢清空
銷毀求長度
排序刪除節點
插入節點
插入演算法1)r=p->pnext;p->next=q;q->pnext=r;
插入演算法2)q->next=p->pnext;p->next=q;【p,q不是節點,是指標變數】
刪除非迴圈單鏈表節點偽演算法的講解
刪除演算法1(不採用):
p->pnext=p->pnext->pnext;
//容易導致記憶體洩露,沒有釋放記憶體
演算法2:先臨時定義乙個指向p後面節點的指標r
r=p->pnext;
p->pnext=p->pnext->pnext;
free
(r);
鍊錶1 單向鍊錶
鍊錶中最簡單的一種是單向鍊錶,它包含兩個域,乙個資料域和乙個指標域,指標域指向鍊錶中的下乙個節點,最後乙個節點的指標域指向乙個空值 鍊錶最基本的結構是在每個節點儲存資料和到下乙個節點的位址,在最後乙個節點儲存乙個特殊的結束標記,另外在乙個固定的位置儲存指向第乙個節點的指標,有的時候也會同時儲存指向最...
學生鍊錶1
include include define null 0 define len sizeof struct student struct student int n struct student creat p2 next null return head out void print head ...
鍊錶總結1
1.給定乙個鍊錶的頭指標,在一次遍歷中,找出這個鍊錶中的中間節點並返回。基本思想 設立兩個指標,比如 p和 q。p每次移動兩個位置,而q每次移動乙個位置,當p到達最後乙個節點時,q就是中間節點了。2.查詢鍊錶中倒數第k個節點 基本思想 兩個指標,保持距離k 3.怎麼判斷鍊錶中是否有環?基本思想 與5...