單鏈表的創建過程就是一個動態生成鏈表的過程。即從“空表”的初始化狀態起,依次建立各元素結點,並逐個插入鏈表。
單鏈表整表創建的算法思路:
- 聲明一指針p和計數器變量i;
- 初始化一空鏈表L;
- 讓L的頭結點的指針指向NULL,即建立一個帶頭結點的單鏈表;
循環:
- 生成一新結點賦值給p;
- 隨機生成一數字賦值給p的數據域p->data;
- 將p插入到頭結點與前一新結點之間。
/*隨機產生n個元素的值,建立帶頭結點的單鏈線性表L(頭插法)*/
void CreateListHead(LinkList *L,int n)
{
LinkList p;
int i;
srand (time(0)); /*初始化隨機數種子*/
*L=(LinkList)malloc(sizeof(Node));
(*L)->next=NULL; /*先建立一個帶頭結點的單鏈表*/
for(i=0;i<n;i++)
{
p= (LinkList)malloc(sizeof(Node)); /*生成新結點*/
p->data=rand()%100+1; /*隨機生成100以內的數字*/
p->next=(*L)->next;
(*L)->next=p; /*插入到表頭*/
}
}
/*隨機產生n個元素的值,建立帶頭結點的單鏈線性表L(尾插法)*/
void CreateListTail(LinkList *L,int n)
{
LinkList p,r;
int i;
srand (time(0)); /*初始化隨機數種子*/
*L=(LinkList)malloc(sizeof(Node));
r=*L; /*r爲指向尾部的結點*/
for(i=0;i<n;i++)
{
p= (Node *)malloc(sizeof(Node)); /*生成新結點*/
p->data=rand()%100+1; /*隨機生成100以內的數字*/
r->next=p; /*將表尾終端結點的指針指向新結點*/
r=p; /*將當前新結點定義爲表尾終端結點*/
}
r->next=NULL; /*表示當前鏈表結束*/
}