線性表可分為順序存儲結構和鏈式存儲結構
順序存儲結構的創建,其實就是一個數組的初始化,即聲明一個類型和大小的數組並賦值的過程。而單鏈表和順序存儲結構就不一樣,它的每個數據的存儲位置不需要像數組那樣集中,它可以很散,是一種動態結構。對於每個鏈表來說,它所占用的空間大小和位置並不需要預先分配划定,可以根據系統的情況和實際的需求即時生成。所以,創建單鏈表的過程就是一個動態生成鏈表的過程。即從“空表”的初始狀態起,一次建立各元素結點,並逐個插入鏈表。
單鏈表的整表創建
單鏈表的整表創建主要有兩種方法,即頭插法和尾插法,下面分別對這兩種方法進行介紹
鏈表類
首先在類中聲明數據成員
1 memberCar *next
1.頭插法
memberCar *head=NULL; //此處為類外,函數上面,通常建立一個空的表頭,表頭不存數據,便於釋放
void create(memberCar *&head) //頭插法,創建節點 { memberCar *p, *s = head;//head為頭節點,s為p前面的一個節點,p為要插入的節點
p = new memberCar(); p->next = NULL;
/*if (head == NULL) //不建議這種寫法(不利於釋放),頭節點為空的情況 { head = p; //p就是頭節點,此時s也為頭節點 s = p; return; }*/ //插入 p->next = s->next; s->next = p; }
2.尾插法
//定義為全局變量,創建鏈表表頭和尾節點
memberCar *head=NULL;
memberCar *pend = NULL;
void create() //尾插法,創建節點
{
memberCar *p ;
p = new memberCar();
p->next = NULL;
//判斷,如果頭節點為空,由於沒有數據成員next,則不能指向下一節點
if (head==NULL)
{
head= p;
pend = p;
}
else
{
pend->next = p;//原來的尾指針指向新建的p
pend = p;//然后尾指針的位置再等於新建指針的位置
}
}
然后就是對鏈表執行操作(如果是對特點的節點操作,那么就可以用if條件語句遍歷)
//此處為遍歷鏈表,注意對鏈表的操作,包括調用函數,修改數據成員都需要遍歷 void show(memberCar *head) //傳入鏈表頭指針 { memberCar *showname = head; while (showname) { showname->print(); //鏈表調用 showname = showname->next; } }
最后就是刪除鏈表,思路:遍歷,先定義一個指針,指向頭節點。然后判斷頭節點的下一節點是否為空,不為空則讓指針指向頭節點的下一節點,然后刪了頭節點,然后頭節點再等於指針所在的節點。循環,以此類推,直到全部刪掉。最后定義的指針為NULL。大功告成。
1 memberCar *tou; 2 tou = head; 3 while(tou->next != NULL) 4 { 5 tou = tou->next; 6 delete head; 7 head = tou; 8 } 9 delete tou;