簡單鏈表
在用鏈表的時候有一點要十分的注意,
這一點是相當的關鍵,簡直是太重要了。
之所以能在這里來說這一點,這個還要
歸功于我的數據結構老師“李學俊”了。
好了, 不廢話了,直入話題。
這一點就是:
在用鏈表的時候,head指針不要存儲任何
數據,也就是說head的數據域是不放入
數據的,那用來做什么呢?
這個問的好,它就在那空著,什么也不做。
可以說head是一個特殊的結點,也可以說
它不是結點,因為結點包括了
數據域和指針域,但是head嚴格來說只有
指針域,雖然有數據域,但是不起作用。
下面來看一個我的代碼,其中包括了建表,
刪表,和在末尾增加數據三個功能。
View Code
#include "iostream" #include "cstring" #include "string" #include "algorithm" #include "cstdio" using namespace std; struct Node { int Num; Node * Next; }; Node *Head; Node *tmp; Node *p; Node *tail; void Init(){ Head = (Node *)malloc(sizeof(Node)); Head->Next = NULL; Head->Num = 0; tail = (Node *)malloc(sizeof(Node));//這句話是多余的,因為在執行tail=Head時tail的地址=Head的地址; tail = Head; } void Build(int n) { tmp = (Node *)malloc(sizeof(Node)); tmp->Num = n; tmp->Next = NULL; tail->Next = tmp; tail = tail->Next; } void Delete(int n){ if(Head->Next==NULL) return; p = Head; while(p->Next->Num!=n && p->Next->Next!=NULL){ p = p->Next; } if(p->Next->Num==n){ if(p->Next->Next==NULL){ tail = p; } p->Next=p->Next->Next; cout<<"Successfully Delete!"<<endl; cout<<"After Deleting:"; } else{ cout<<"Not Found!"<<endl; cout<<"After Deleting:"; } } void Print(){ p = Head->Next; if(p==NULL){ cout<<"Empty!"<<endl; return; } while(p!=NULL){ cout<<p->Num<<" "; p = p->Next; } cout<<endl; } int main() { int a; Init(); while(cin>>a && a){ Build(a); } Print(); while(cin>>a && a){ Delete(a); Print(); } if(Head->Next==NULL){ Head = tail; } while(cin>>a && a){ Build(a); } cout<<"After Adding:"; Print(); }
posted on 2012-04-25 00:59 More study needed. 閱讀(238) 評論(0) 收藏 舉報

浙公網安備 33010602011771號