對於單鏈表,實現獲取第i個元素的數據的操作GetElem,在算法上,相對要麻煩一些。
算法思路(獲取第i個數據):
- 聲明一個指針p指向鏈表的第一個結點,初始化j從1開始;
- 當j < i 時,就遍歷鏈表,讓p的指針向後移動,不斷指向下個結點,j累加1;
- 若到鏈表末尾p爲空,則說明第i個結點不存在;
- 否則查找成功,返回結點p的數據。
/*用e返回L中第i個數據元素的值*/
Status GetElem(LinkList L,int i,ElemType *e)
{
int j=1;
LinkList p; /*聲明一個指針p*/
p=L->next; /*讓p指向鏈表L的第一個結點*/
while(p && j<i)
{
p=p->next; /*讓p指向下一個結點*/
++j;
}
if(!p || j>i)
{
return ERROR; /*第i個結點不存在*/
}
*e=p->data;
}