單鏈表 頭指標

2021-08-04 23:25:20 字數 2946 閱讀 6873

#include #include //malloc的標頭檔案

#define ok 0

#define error -1

#define malloc_error -2

typedef int elementtype;

typedef struct node

node;

typedef node *pnode; //重新命名結點指標型別

//頭插法建立鍊錶

elementtype data)

//將新資料賦給新結點

p->data = data; //從右往左看,將data賦給新結點p的data

p->next = *h; //從左往右看,p-next指向*h,獲取到位址

*h = p; //從左往右看,*h移動到p,因為是頭插,往前推移

return ok;

}//尾插法建立鍊錶

int create_list_tail(pnode *h, elementtype data)

node->data = data;

node->next = null;

//將node加入到鍊錶最後,此處要考慮是否非空表

if (*h == null) //空表

else

temp->next = node; }

return ok;

}//在第pos個結點處插入乙個資料

int insert_node(pnode *h, int pos, elementtype data)

//非空表 若插入的位置超過鍊錶的位置,則無效

if (temp == null && *h != null)

//新建結點

pnode node = (pnode)malloc(sizeof(node)/sizeof(char));

if(node == null)

node->data = data;

//將結點插入到鍊錶中

if (*h == null || pos == 1) //插在表前

else

return ok;

}//將第pos個結點刪除

int delete_node(pnode *h, int pos)

pnode p = *h; //結點p可用來從頭指標開始操作鍊錶,讓p向後移動

int k = 1; //第乙個位置

while (p && k < pos-1) //找到第pos-1個結點

if (p == null || p->next == null) //要刪除的結點超過鍊錶數

pnode temp = p; //需定義乙個結點來儲存要刪除的結點

if (pos == 1)

else

free(temp);

temp = null;

return ok;

}//鍊錶逆序

int inverse_list(pnode *h)

pnode pre = *h; //當前結點的前乙個結點:初始化為指向第乙個結點的指標

pnode cur = pre->next; //當前結點:初始化為指向第二個結點的指標

pnode next = null; //用於儲存當前結點的下乙個結點指標

while(cur)

//處理頭指標和尾指標

(*h)->next = null; //原來的第乙個結點現在是最後乙個結點,要將其指標置空

*h = pre ; //頭指標指向現在的第乙個結點也就是原來的最後乙個結點

return ok;

}//查詢鍊錶中的元素,找到後返回該結點的指標

pnode search(pnode h, elementtype data)

pnode temp = h;

while(temp)

temp = temp->next; //從頭開始向後乙個個找 }

return null; }

//計算鍊錶的長度

int listlen(pnode h)

return len;

}//列印

void display(pnode head)

pnode temp = head; //定義乙個臨時的結點,將頭結點賦給它

while (temp) //迴圈,直到鍊錶中的所有結點都遍歷完

printf ("\n");

}int main()

//尾插法建立鍊錶 0 1 2 3 4 5 6 7 8 9

/* if(create_list_tail(&head,i) != ok)

*/} //在第pos個結點處插入乙個資料

/* if (insert_node(&head,1,1) != ok)

display(head); */

//將第pos個結點刪除

if(delete_node(&head,8) != ok)

//將鍊錶逆序

if (inverse_list(&head) != ok)

//查詢鍊錶中的元素,找到後返回該結點的指標

pnode p =search(head, 7);

if (p == null)

else

display(head);

//計算鍊錶的長度

int len = listlen(head);

printf ("len = %d\n",len);

return 0;

}

單鏈表頭節點,頭指標

鍊錶中第乙個結點的儲存位置叫做頭指標,那麼整個鍊錶的訪問就必須是從頭指標開始進行了。之後的每乙個結點,其實就是上乙個的後繼指標指向的位置。這裡有個地方要注意,就是對頭指標概念的理解,這個很重要。鍊錶中第乙個結點的儲存位置叫做頭指標 如果鍊錶有頭結點,那麼頭指標就是指向頭結點資料域的指標。畫乙個圖吧。...

單鏈表 頭指標與頭結點

頭指標 頭指標是指鍊錶指向第乙個結點的指標,若煉表有頭結點,則是指向頭結點的指標。頭指標具有標識作用,所以常用頭指標冠以鍊錶的名字。無論鍊錶是否為空,頭指標均不為空。頭指標是鍊錶的必要元素。頭結點 它是為了操作的統一和方便設立的,放在第乙個元素的結點之前,其資料域一般無意義 但也可以用來存放鍊錶的長...

單鏈表 逆置單鏈表(頭插法且雙指標)

題意 採用帶頭結點的單鏈表,設計乙個演算法將其就地逆置,所謂 就地 是指輔助空間o 1 這裡可以有兩種方法做 1.頭插法且雙指標 2.改變指標指向且三指標 兩方法共同點 頭結點還是作為頭結點。第乙個結點作為尾節點。單鏈表的儲存結構 typedef struct linklist分析 這裡先解釋第一種...