**:
//這個程式是帶頭結點的單鏈表的實現
/* 單鏈表鏈式儲存結構
頭指標與頭結點的異同:
頭指標:
1、頭指標是指鍊錶指向第乙個結點的指標,若煉表有頭結點,則是指向頭結點的指標
2、無論鍊錶是否為空,頭指標均不為空
3、頭指標是鍊錶的必要元素
頭結點:
1、頭結點是為了操作的統一和方便而設立的,放在第乙個元素的結點之前,其資料域一般無意義(但也可以用來存放鍊錶的長度)
2、頭結點不一定是鍊錶的必要元素
*/#include
#include
typedef
int bool;
#define true 1
#define false 0
typedef
struct lnodelnode,
*linklist;
/* 頭插法建立單鏈表
頭插法從乙個空表開始,生成新結點,讀取資料存放到新結點的資料域中,然後將新結點插入到當前鍊錶的表頭上,直到結束為止
始終讓新結點插在第一的位置
*///l是指向linklist(即node*)的指標型別,*l和linklist型別一樣
void
createlisthead
(linklist *l)
return l;
}bool isempty
(linklist l)
else
}bool listinsert
(linklist *l,
int i,
int e)
lnode *p;
//指標p指向當前掃瞄到的結點
int j=0;
//當前p指向的是第幾個結點
p=*l;//l指向頭結點,頭結點是第0個結點(不存資料)
while
(p!=
null
&&jif(p==
null
) lnode *s=
(linklist)
malloc
(sizeof
(lnode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}bool listdelete
(linklist *l,
int i,
int*e)
lnode *p;
//指標p指向當前掃瞄到的結點
int j=0;
//當前p指向的是第幾個結點
p=*l;//l指向頭結點,頭結點是第0個結點(不存資料)
while
(p!=
null
&&jif(p==
null
)//第i-1個結點之後已無其他結點
if(p->next==
null
) lnode *q=p->next;
//q指向被刪除結點
*e=q->data;
p->next=q->next;
free
(q);
return true;
}lnode*
getelem
(linklist l,
int i)
if(i<1)
while
(p!=
null
&&jreturn p;
}int
clearlist
(linklist *l)
(*l)
->next=
null
;return0;
}void
outputlist
(linklist l)
linklist temp=l;
while
(temp->next!=
null
)printf
("\n");
}int
main()
執行結果:
C語言帶頭結點的單鏈表
之前的文章建立的單鏈表都是不帶頭結點的單鏈表。有時,我們為了更加方便地對鍊錶進行操作,會在單鏈表的第乙個結點前附設乙個結點,稱為頭結點。頭指標與頭結點的異同 頭指標 頭指標是指煉表中指向第乙個結點的指標,若煉表有頭結點,則是指向頭結點的指標。頭指標具有標識作用,所以常用頭指標冠以鍊錶的名字。頭結點 ...
單鏈表的實現 帶頭結點
linklist.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std template struct node template class linklist template linklist linklist templa...
帶頭結點的單鏈表實現
includeusing namespace std typedef char datatype struct node 按序號查詢鍊錶 node getnode node head,int i if i j return null else return p 說明沒找到第 i 個結點 按值查詢 n...