創建頭結點
流程:首先創建頭結點表指針并為其分配空間——并將頭結點指向空,防止出現段錯誤。
代碼:
//創建頭結點
Node* Create_List ()
{//創建頭結點Node* list = (Node*) malloc(sizeof(Node) / sizeof(char));if (NULL == list) //檢驗創建是否成功{return FALSE;}list->next = NULL; //防止段錯誤return list;
}
頭插法
流程:判斷數據傳入是否正確——創建一個新結點并判斷結點創建是否成功——給新結點成員變量賦值——讓新結點變為鏈表的第一個結點
代碼:
// 頭插法
int Insert_Last (Node* h, LinkData data)
{// 判斷數據傳入是否正確if (NULL == h){return FALSE;}// 創建新結點并判斷創建是否成功Node* node = (Node*) malloc(sizeof(Node) / sizeof(char));if (NULL == node){return FALSE;}// 給結點成員變量賦值node->data = data;node->next = h->next; // 和頭指針的不同:node->next = *h;// 讓新結點變為鏈表的第一個節點h->next = node;return TRUE;
}
尾插法
流程:判斷傳入數據是否正確——創建一個新結點并為其分配空間,然后判斷創建是否成功——給新結點成員變量賦值——找到最后一個結點并讓其成為最后一個節點
代碼:
//尾插
int Insert_Last(Node* h, LinkData data)
{if (NULL == h){return FALSE;}Node* node = (Node*) malloc(sizeof(Node) / sizeof(char));if (NULL == node){return FALSE;}node->data = data;node->next = NULL;Node* tmp = h;while(tmp->next){tmp = tmp->next;}tmp->next = node;return TRUE;
}
中間插法(在pos處插入數據)
流程:判斷傳入數據和pos的位置是否符題意——找到插入位置的前一個結點,找到后要判斷所找的位置是否越界——創建一個新結點并為其分配空間,然后判斷創建是否成功——給新結點成員變量賦值——找到最后一個結點并讓其成為最后一個結點。代碼:
//中間插法
int Insert_Pos(Node *h, int pos, LinkData data)
{if (NULL == h){return FALSE;}Node* tmp = h;int i;for (i = 0; i < pos - 1; i++){if (NULL == tmp){break;}tmp = tmp->next;}if (NULL == tmp){printf ("插入位置越界");return FALSE;}Node* node = (Node*) malloc(sizeof(Node) / sizeof(char));if (NULL == node){return FALSE;}node->data = data;node->next = tmp->next;tmp->next = node;return TRUE;
}
頭結點的好處就在于他不用考慮空表的情況,詳細的注釋之前的博客有,這邊我就省略了。