資料結構中,在單鏈表的第一個結點之前附設一個結點,它沒有直接前驅,稱之為頭結點。下面以順序儲存為例來敘述。
(1) 頭插法建表
該方法從一個空表開始,讀取陣列a中的字元,生成新結點,將讀取的資料存放到新結點的資料域中,然後將新結點插入到當前連結串列的表頭上,直到結束為止。演算法如下:
void CreateListF(Snode *&L, ElemType a[], int n)
{ Snode *s; int i;
L = (Snode *) malloc(sizeof(Snode));
L->next = NULL;
for (i=0; i<n;i++)/*改成for (i=n; i>1;i--)可讓節點次序與原陣列元素順序相同。
{ s = (Snode *)malloc(sizeof(Snode));
s->data = a[i];
s->next = L->next;
L->next = s;
}
(2) 尾插法建表
頭插法建立連結串列雖然演算法簡單,但生成的連結串列中結點的次序和原陣列元素的順序相反,若希望兩者次序一致,可採用尾插法。該方法是將新結點插到當前連結串列的表尾上,為此必須增加一個尾指標r,使其始終指向當前連結串列的尾結點。演算法如下:
void CreateListR(Snode *&L, ElemType a[], int n)
{ Snode *s, *r; int i;
r = L;
for (i=0; i<n;i++)
r->next = s;
r = s;
r-> next = NULL;
資料結構中,在單鏈表的第一個結點之前附設一個結點,它沒有直接前驅,稱之為頭結點。下面以順序儲存為例來敘述。
(1) 頭插法建表
該方法從一個空表開始,讀取陣列a中的字元,生成新結點,將讀取的資料存放到新結點的資料域中,然後將新結點插入到當前連結串列的表頭上,直到結束為止。演算法如下:
void CreateListF(Snode *&L, ElemType a[], int n)
{ Snode *s; int i;
L = (Snode *) malloc(sizeof(Snode));
L->next = NULL;
for (i=0; i<n;i++)/*改成for (i=n; i>1;i--)可讓節點次序與原陣列元素順序相同。
{ s = (Snode *)malloc(sizeof(Snode));
s->data = a[i];
s->next = L->next;
L->next = s;
}
}
(2) 尾插法建表
頭插法建立連結串列雖然演算法簡單,但生成的連結串列中結點的次序和原陣列元素的順序相反,若希望兩者次序一致,可採用尾插法。該方法是將新結點插到當前連結串列的表尾上,為此必須增加一個尾指標r,使其始終指向當前連結串列的尾結點。演算法如下:
void CreateListR(Snode *&L, ElemType a[], int n)
{ Snode *s, *r; int i;
L = (Snode *) malloc(sizeof(Snode));
L->next = NULL;
r = L;
for (i=0; i<n;i++)
{ s = (Snode *)malloc(sizeof(Snode));
s->data = a[i];
r->next = s;
r = s;
}
r-> next = NULL;
}