1. 程式人生 > >線性表及單鏈表

線性表及單鏈表

一.


頭指標與頭結點的異同:

頭指標:

頭指標是指連結串列指向第一個結點的指標,若連結串列有頭結點,則是指向頭結點的指標。

頭指標具有標識作用,所以常用頭指標冠以連結串列的名字。

無論連結串列是否為空,頭指標均不為空,頭指標是連結串列的必要元素。

頭結點:

頭結點是為了操作的統一和方便而建立的,放在第一元素的結點之前,其資料域一般無意義(也可存放連結串列的長度)

有了頭結點,對在第一元素結點錢插入結點和刪除第一結點,其操作與其他結點的操作就統一了。

頭結點不一定是連結串列必需元素。

線性錶鏈式儲存結構程式碼描述


Typedef struct Node
{
ElemType data;
Struct Node *next;
} Node;
Typedef struct Node *LinkList;

三.

單鏈表的讀取

獲得連結串列第i個數據元素的演算法思路:

1.     宣告一個結點p指向連結串列第一個結點,初始化j從1開始

2.     2.當j<i時,就遍歷連結串列,讓p的指標向後移,不斷指向下一個結點,j累加1;

3.     若到連結串列末尾p為空,則說明第i個元素不存在;

4.     否則查詢成功,返回結點p的資料;

實現程式碼演算法如下:

/*初始條件:順序線性表L已存在,1<=i<=ListLength(L)*/
/*操作結果:用e返回L中第i個數據元素的值*/
Status GetElem(LinkList L,int i,ElemType*e)
{
int j;
Linklist p;     //宣告一結點p
P=L->next;     //讓p指向連結串列L的第一個結點
j=1;
while(p&&j<i)   //當p不為空或者計數器j還沒有找到i時,迴圈繼續
{
P=p->next;   //讓p指向下一個結點(傳遞指標)
++j;
}
if(!p||j>i)   
return ERROR;  //i不存在
*e=p->data;   //找到i,用e返回i的值
return OK;
}

核心思想:工作指標後移