数据结构和算法:(3)3.2.1单链表的整表创建
對于順序存儲結構的線性表的整表創建,我們可以用數組的初始化來直觀理解。(因為之前說過我們線性表的順序存儲結構呢事實上也就是在數組的基礎上加多一個變量來存儲當前線性表的長度構成的一個結構,所以我們用數組的初始化可以直接來理解順序存儲結構的整表創建)
而單鏈表和順序存儲結構就不一樣了,他不像順序存儲結構數據這么集中,他的數據可以是分散在內存各個角落的,他的增長也是動態的。對于每個鏈表來說,它所占用空間的大小和位置是不需要預先分配劃定的,可以根據系統的情況和實際需求即時生成。
創建單鏈表的過程是一個動態生成鏈表的過程,從“空表”的初始狀態起,依次建立各元素結點,并逐個插入鏈表。(意思就是需要我就建立,建立我就插入,都是一個動態的過程)
所以單鏈表整表創建思路如下:
- 聲明一結點p和計數器變量i;
- 初始化一空鏈表L;
- 讓L的頭結點的指針指向NULL(因為剛開始是一個空表嘛,所以他的頭指針指向NULL),即建立一個帶頭結點的單鏈表;
- 循環實現后繼結點的賦值和插入。(有多少個結點就有多少個插入,記得要給結點先賦值)
---頭插法建立單鏈表:(要插入的話就插在頭部位置,第一個插入的在最尾部)
頭插法從一個空表開始,生成新結點,讀取數據存放到新結點的數據域中,然后將新結點插入到當前鏈表的表頭上(頭部就是Head指針指向的那個位置),直到結束為止。
簡單來說就是把新加進來的元素放在表頭后的第一個位置(第一個結點處);先讓新結點的next指向頭結點之后的那個(的NULL,因為第一個Head是指向的NULL);然后將表頭的next指向新結點(如果有第2個的話,現在的Head是指向我們剛才插入的新結點,那么第2個新結點的next就指向我們上一個插入的next結點,然后將Head指向他)。通俗地說用插隊方法來比喻,始終讓新結點插在第一個位置。
頭插法的代碼如下:CreateListHead.c
//頭插法建立單鏈表示例
void CreateListHead(LinkList *L,int n)//5因為我們這里聲明的是一個指針來指向我們的結點
{//1以下2句是聲明部分LinkList p;//6int i;srand(time(0));//2初始化隨機數種子//srand做我們后邊隨即的一個準備*L=(LinkList)malloc(sizeof(Node));//4使用malloc生成一個結點把他賦值給*L(*L)->next=NULL;//6所以這里記得要用*L的next指向NULL//初始指向NULL//因為*比->優先級低所以加上括號for(i=0;i<n;i++){p=(LinkList)malloc(sizeof(Node))//生成新結點//7p是一個新結點也就是一個中介結點,也就是每生成一個新結點,給他賦值的時候我們就給他p作為中介存放,然后再給他放到這個單鏈表里邊,p是一個中介存放p->data=rand()%100+1;//3rand是真正生成隨機數的一個函數//8生成1到100的隨即值,存放到數據域p->next=(*L)->next;//9下一個指向了p->next//L是單鏈表,就是我們這個對象,我們單鏈表的next就是下一個,指向了p->next就是把他賦值為p->next,然后10(*L)->next=p;//10將我們的 (*L)->next賦值為p,這個就是實現插到表頭的位置,因為他把表頭的數據賦值給了p->next(就是上一句 p->next=(*L)->next;相當于表頭指向了下一個,)(下一個把p給了單鏈表的表頭)}
}
//區分什么時候用*L,什么時候用L,什么時候用p也就是不加*?其實很簡單,前邊你聲明處也就是1加了*那你后邊就要加*;在6處LinkList p,你就直接用變量p,他們都是對應的。
頭插法建立鏈表雖然簡單,但生成的鏈表中結點的次序和輸入的順序相反。下面了解一下尾插法,如下圖:
尾插法的代碼CreateListTail.c如下:
//尾插法建立單鏈表示例
void CreateListHead(LinkList *L,int n)//5因為我們這里聲明的是一個指針來指向我們的結點
{//1以下2句是聲明部分LinkList p,r;//r變量指向單鏈表結點int i;srand(time(0));*L=(LinkList)malloc(sizeof(Node));//4使用malloc生成一個結點把他賦值給*Lr=*L;//初始化是空表所以他指向單鏈表的尾部(末尾)for(i=0;i<n;i++){p=(LinkList)malloc(sizeof(Node))p->data=rand()%100+1;r->next=p;//p臨時結點r=p;//是難點也是重點}r->next=NULL;
}
解讀r=p這句代碼,如下圖:
總結
以上是生活随笔為你收集整理的数据结构和算法:(3)3.2.1单链表的整表创建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构和算法:(3)3.2线性表的链式
- 下一篇: 数据结构和算法:(3)3.2.2单链表的