單鏈表(表頭結點)

2021-08-04 23:27:28 字數 2836 閱讀 3183

#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結點,然後將表...