構成鍊錶
標頭檔案#include#include#include
;//建立節點
-
全域性定義鍊錶頭尾指標
struct node *head=
null
;struct node *end=
null
;
void
addlisttill
(int a)
else
頭添
struct node *
readlist()
return head;
}
1.建立乙個節點(給節點在堆區分配一段記憶體)
2.給節點資料進行賦值
3.尾新增(兩種情況:a.乙個節點都沒有head=null b.已經有了節點,新增到尾巴上)
)
void
scanlist()
2.查詢指定的節點(遍歷,乙個乙個找)(findnode)(結構體函式)
struct node *
findnode
(int a)
temp=temp->next;
}return
null
;}
定義乙個臨時變數指向頭,對資料中的節點進行判斷,若找到,返回該節點,沒找到,返回null
1.沒有節點(null=head)2.沒找到此節點(findnode)—返回為null
3.有此節點(在連線到鍊錶上時,分為兩種情況,找到的節點在尾部,找到的節點在中間)
void
addlistrand
(int index,
int a)
//在指定位置index增加節點a
//分為三種情況
//struct node *pt=
findnode
(index)
;//pt就是找指定位置的指標if(
null
==pt)
//struct node *temp=
(struct node*
)malloc
(sizeof
(struct node));
temp->a=a;
temp->next=
null;if
(pt==end)
//在尾部
else
1.乙個乙個清空2.記錄頭結點的位置,實現++,釋放
3.頭尾清空
void
freelist()
head=
null
; end=
null
;}
1.鍊錶為空2.只有乙個節點
3.有大於1的節點(找到尾節點的前乙個節點)
void
deletelisttail()
else
free
(end)
; end=temp;
end->next=
null
;//注意尾巴指標為空
}}
1.空節點2.非空節點
void
freeheadlist()
else
}
1.沒有節點2.沒有指定節點
3.找到了指定節點:a.只有乙個節點
b.只有兩個節點(看刪除頭還是刪除尾)
c.有多個節點(看刪除頭還是刪除尾還是刪除中間某個節點//直接跳過temp節點)
void
deletelistrand
(int a)
//無指定節點
if(head==end)
//有乙個節點
else
if(head->next=end)
else
if(head==temp)
}//有兩個節點
else
pt->next=temp->next;
free
(temp);}
}}
主函式
void
main()
addlistrand(4
,14);
deletelisttail()
;deletelistrand(4
);scanlist()
;freelist()
;pfind=
findnode(5
);if(pfind!=
null
)else
else
}return head;
}struct listnode *
deletem
(struct listnode *l,
int m )
刪除頭 if
(temp->data==m)
刪除尾 p=temp;
q=temp->next;
//q找要刪除的點
while
(q)else
}return temp;
} 刪除中間
鍊錶的基本操作
include include include include using namespace std struct listnode void initnode listnode node bool isempty listnode head void pushfront listnode hea...
鍊錶的基本操作
鍊錶操作是最基本的 必須掌握的知識點,最好滾瓜爛熟,透徹理解。工作時間短用的也不夠頻繁,還是總結一下比較好,以加強鞏固。1.單鏈表 結點形式 區分幾個概念 首節點 第乙個元素所在節點。頭指標 指向首節點的指標。頭結點 為了操作方便,在第乙個節點之前附設的乙個結點,此時指向頭結點的為頭指標。基本操作 ...
鍊錶的基本操作。。。
include node.h 列印鍊錶 void print node head printf n 從尾部插入 void insert tail node head,const int d while t next null t next p p next null 從頭部插入 void inser...