#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分析 這裡先解釋第一種...