#include #include #define ok 0
#define error -1
#define malloc_error -2
typedef int elementtype; //c語言中沒有elementtype這個資料型別,講資料結構時,用這個來泛指某一種資料型別
typedef struct node
node;
typedef node *pnode; //重新命名結點指標型別
//頭插法建立鍊錶
int create_list_head(pnode h, elementtype data)
pnode node = (pnode)malloc(sizeof(node)/sizeof(char));
if (node == null)
node->data = data;
node->next = h->next;
h->next = node;
return ok;
}//尾插法建立鍊錶
int create_list_tail(pnode h, elementtype data)
pnode node = (pnode)malloc(sizeof(node)/sizeof(char));
if (node == null)
node->data = data;
node->next = null;
//找最後乙個結點
pnode temp = h;
while (temp->next)
temp->next = node;
return ok;
}//在第pos個結點處插入乙個資料
int insert_node(pnode h, int pos, elementtype data)
if (temp == null) //越界
pnode node = (pnode)malloc(sizeof(node)/sizeof(char));
if (node == null)
node->data = data;
node->next = temp->next;
temp->next = node;
return ok;
}//在鍊錶中刪除第pos個結點
int delete_node(pnode h, int pos)
if (temp == null || temp->next == null) //越界
pnode p = temp->next;
temp->next = p->next;
free(p);
p = null;
return ok;
}//鍊錶逆序
int inverse_list(pnode h)
pnode pre = h->next;
pnode cur = pre->next;
pnode next = null;
while(cur)
/* h->next->next == null; //兩個等於號!!!,將原來的頭指標的指標變為尾指標置空
h->next = pre; //將頭結點指向現在的第乙個結點,重置頭結點的next
return ok; */
h->next->next = null;
h->next = pre; //將頭結點指向現在的第乙個結點,重置頭結點的next
return ok;}
//查詢鍊錶中的元素,找到後返回該結點的指標
pnode search(pnode h, elementtype data)
pnode temp = h->next;
while(temp)
temp = temp->next; }
return null;
} //計算鍊錶的長度
int listlen(pnode h)
return len;
} //列印
void display(pnode h)
pnode temp = h->next; //鍊錶第乙個結點指標
while (temp)
printf ("\n");
}int main()
head_node->next = null; //空鍊錶
int i = 0;
for (i = 0; i < 10; i++)
*///尾插法建立鍊錶
if (create_list_tail(head_node,i) != ok)
} /* //在第pos個結點處插入乙個資料
if (insert_node(head_node, 6, 7) != ok)
//在鍊錶中刪除第pos個結點
if (delete_node(head_node,4) != ok)
*///將鍊錶逆序
if (inverse_list(head_node) != ok)
display(head_node);
//查詢元素
pnode p = search(head_node, 5);
if(p == null)
else
//計算長度
int len = listlen(head_node);
printf("%d\n",len);
return 0;
}
單鏈表 頭指標與頭結點
頭指標 頭指標是指鍊錶指向第乙個結點的指標,若煉表有頭結點,則是指向頭結點的指標。頭指標具有標識作用,所以常用頭指標冠以鍊錶的名字。無論鍊錶是否為空,頭指標均不為空。頭指標是鍊錶的必要元素。頭結點 它是為了操作的統一和方便設立的,放在第乙個元素的結點之前,其資料域一般無意義 但也可以用來存放鍊錶的長...
單鏈表頭結點 首元節點詳解
本篇部落格純屬鍊錶的先導部落格 正在趕工 首元結點 是指煉表中用來儲存資料元素的結點中的第乙個結點。頭結點 在單鏈表的第乙個結點之前附設的乙個結點。他的資料域可以不儲存任何資訊,也可以儲存如線性表的長度等類的附加資訊。頭結點的指標域指向首元結點。並且頭結點不計入鍊錶的長度。哦,對,還有頭指標,頭指標...
帶表頭結點的單鏈表的基本操作
已知l 是帶表頭結點的非空單鏈表,且p結點既不是首元結點,也不是尾元結點 1.刪除p結點的直接後繼結點 思路 先用工作結點儲存p結點的直接後繼,然後將p結點的指標域指向p結點的直接後繼節點的直接後繼節點,然後再刪除該工作結點。2.刪除p節點的直接前驅結點 有毛病 思路 用工作結點儲存p結點,然後將表...