#include#include#define maxsize 10
#define elemtype char
#define ok 1
#define error 0
typedef struct node/*結點型別定義*/
node,*linklist;/* linklist為結構體指標型別*/
//換行函式
void enter(int n)
//計算單鏈表的長度
int list_len(linklist h)
return j;
}
//用尾插法建立單鏈表
int create_from_tail(linklist h)
else
}enter(1);
return(ok);
}//列印鍊錶資料
void print_out(linklist h)
enter(2);
}//按結點查詢
node *get(linklist h,int i)
if(i==j)
else
}//按元素值查詢
int locate(linklist h,elemtype key)
else break;
}if(p==null)
else
}//單鏈表插入操作
int ins_list(linklist h,int i,elemtype e)
pre=get(h,i-1);//呼叫get函式,找到第i-1個結點
if(pre==null)
else
}//單鏈表刪除操作
int del_list(linklist h,int i, char *e)
else
}//主方法
int main()
printf("單鏈表長度:%d",list_len(h));
enter(2);
printf("請輸入需查詢的節點:");
scanf("%d",&a);
if(get(h,a)==null) //按結點查詢
else printf("查詢到的元素:%c",*get(h,a));
enter(2);
printf("請輸入要查詢的元素值:");
getchar();
scanf("%c",&b);
locate(h,b);//按值查詢
enter(2);
printf("請輸入要插入的位置和元素,[hint:輸入兩個資料之間有逗號]:");
getchar();
scanf("%d,%c",&d,&c);
ins_list(h,d,c);//插入
printf("請輸入要刪除的位置:");
getchar();
scanf("%d",&f);
del_list(h,f,&e);//刪除
資料結構中,在單鏈表的開始結點之前附設乙個型別相同的結點,稱之為頭結點。頭結點的資料域可以不儲存任何資訊,頭結點的指標域儲存指向開始結點的指標(即第乙個元素結點的儲存位置)。
作用
1、防止單鏈表是空的而設的.當鍊表為空的時候,帶頭結點的頭指標就指向頭結點.如果當鍊表為空的時候,單鏈表沒有帶頭結點,那麼它的頭指標就為null.
2、是為了方便單鏈表的特殊操作,插入在表頭或者刪除第乙個結點.這樣就保持了單鏈表操作的統一性!
3、單鏈表加上頭結點之後,無論單鏈表是否為空,頭指標始終指向頭結點,因此空表和非空表的處理也統一了,方便了單鏈表的操作,也減少了程式的複雜性和出現bug的機會。
4、對單鏈表的多數操作應明確對哪個結點以及該結點的前驅。不帶頭結點的鍊錶對首元結點、中間結點分別處理等;而帶頭結點的鍊錶因為有頭結點,首元結點、中間結點的操作相同 ,從而減少分支,使演算法變得簡單 ,流程清晰。對單鏈表進行插入、刪除操作時,如果在首元結點之前插入或刪除的是首元結點,不帶頭結點的單鏈表需改變頭指標的值,在c 演算法的函式形參表中頭指標一般使用指標的指標(在c+ +中使用引用 &);而帶頭結點的單鏈表不需改變頭指標的值,函式引數表中頭結點使用指標變數即可。
資料結構 線性表之帶頭結點單鏈表
之前跟著朱老師寫的乙個帶頭結點的 建立鍊錶時有兩種方法,一種是先初始化 建立乙個空鍊錶 然後對這個空鍊錶進行結點輸入,建立鍊錶 這個時候,由於已經有了頭結點,將其傳入,直接在頭結點的後面進行操作 另外一種是將初始化和建立鍊錶放到乙個函式裡,這時候傳入的鍊錶就什麼都沒有,連頭結點也沒有 先建立頭結點,...
資料結構之單鏈表(帶頭節點)
今天來聊聊單鏈表。單鏈表是以節點存的鏈式結構,分為帶頭節點和不帶頭節點的單鏈表。單鏈表中的節點包括data域和next域,data域儲存元素的值,next域則儲存下乙個節點的位址。單鏈表中的各個節點在記憶體中不一定是連續儲存的,儲存形式如下圖所示 從圖中可以看出,單鏈表中的各個節點並不是連續儲存的。...
資料結構 單鏈表(帶頭結點)
單鏈表是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以結點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。簡單講就是邏輯相鄰,物理不相鄰 帶頭結點 list.h prag...