頭指標鍊錶
頭指標煉表相較於頭結點鍊錶操作起來更繁瑣。
以下是頭指標鍊錶的基本操作:
#include #include #define true 1
#define false 0
typedef int linkdata; // 鍊錶的資料型別
typedef struct _node
node;
// 鍊錶的頭插
int insert_head(node **h, linkdata data)
// 給結點成員變數賦值
node->data = data;
node->next = *h;
// 讓新節點變為鍊錶的第乙個結點
*h = node;
return true;
}// 尾插
int insert_last(node **h, linkdata data)
// 建立新節點
node* node = (node*)malloc(sizeof(node)/sizeof(char));
if (node == null)
// 給結點成員變數賦值
node->data = data;
node->next = null;
// 找最後乙個結點
node * tmp = *h; // 指向第乙個結點
if (tmp == null) // 空表
else
tmp->next = node;
} return true;
}// 在第 pos 個節點處插入資料,鍊錶結點從1開始,沒有第0個結點
int insert_pos (node** h, int pos, linkdata data)
// 給結點成員變數賦值
node->data = data;
// 空表的狀態下,只能插入在第乙個結點處
if (*h == null)
node->next = null;
*h = node;
} else // 非空表,需要找到插入位置的前乙個結點
else
if (tmp == null)
node->next = tmp->next;
tmp->next = node;
} }return true;
}int delete_pos(node** h, int pos)
else
if (tmp->next == null)
node* p = tmp->next;
tmp->next = p->next;
free(p); }
return true;
}int reverse_list(node **h)
(*h)->next = null;
*h = pre;
return true;
}void display(node *h)
printf ("\n");
}int main()
#if 0
insert_pos(&head, 1, 1000);
insert_pos(&head, 10, 2000);
insert_pos(&head, 13, 3000);
insert_pos(&head, 15, 3000);
insert_pos(&head, 0, 1000);
#endif
//delete_pos(&head, 11);
display(head);
reverse_list(&head);
display(head);
return 0;
}
資料結構第二章 鍊錶中的頭指標
這裡先講個杜撰的故事 有一名超級無敵的殺手,暫且取名叫蠻王 模擬下文的linkedlist 吧,為了生活已經退隱峽谷,但是時常想起自己的那把絕世 九頭鞭 linkedlist要操作的鍊錶 這把屠龍刀,藏於峽谷的某處,但是藏匿的位址 模擬head頭指標 是存在於蠻王的兜裡的。每當需要的時候,就可以根據...
資料結構(鍊錶雙指標)2020 08 10
給定兩個 單向 鍊錶,判定它們是否相交並返回交點。請注意相交的定義基於節點的引用,而不是基於節點的值。換句話說,如果乙個鍊錶的第k個節點與另乙個鍊錶的第j個節點是同一節點 引用完全相同 則這兩個鍊錶相交。輸入 intersectval 8,lista 4,1,8,4,5 listb 5,0,1,8,...
資料結構 鍊錶
鍊錶 what 就是一張鏈式儲存的表,是一種資料結構,是基礎,所以還是不要想有什麼用。具體呢?在c中就用結構體實現物件描述,然後通過函式來實現各個基本操作 c 則用類來表述,c中的結構體就可以看成c 中的類,然後通過類封裝各個操作步驟。這些操作實現後就需要 來測試,號稱demo,就是main函式裡面...