一、調試
1.一般調試
2.找段錯誤
二、鏈表的一般操作
1.單鏈表的修改
int ModifyLinkList(LinkList*ll,char*name,DATATYPE*data)
{DATATYPE * tmp = FindLinkList(ll, name);if(NULL == tmp){return 1;}memcpy(tmp,data,sizeof(DATATYPE));return 0;
}
2.單鏈表的銷毀
int DestroyLinkList(LinkList**ll)
{while(1){LinkNode * tmp = (*ll)->head;if(NULL == tmp){break;}(*ll)->head = (*ll)->head->next;free(tmp); }free(*ll);*ll = NULL;return 0;
}
3.查找中間節點
LinkNode* FindMidLinkList(LinkList*ll)
{LinkNode*slow = ll->head;LinkNode*fast = ll->head;while(fast){fast =fast->next;if(NULL == fast){break;;}slow = slow->next;fast =fast->next;}return slow;
}
?4.找倒數第k個節點
/*** @brief 查找倒數第k個節點* * @param ll 需要查找的鏈表* @param k 倒數第k個節點* @return LinkNode* 找到對應的節點*/
LinkNode*FindKLastLinkList(LinkList*ll,int k)
{LinkNode*slow = ll->head;LinkNode*fast = ll->head;int i = 0;for(i = 0;i<k;++i){fast =fast->next;}while (fast) {fast =fast->next;slow = slow->next;}return slow;
}
5.鏈表的逆序
int ReverseLinkList(LinkList*ll)
{LinkNode*prev = NULL;LinkNode*tmp = ll->head;LinkNode*next = tmp->next;int len = GetSizeLinkList(ll);if(len<2){return 1;}while(1){tmp->next = prev;prev = tmp;tmp = next;if(NULL == tmp) break;next = next->next; }ll->head = prev;return 0;
}
6.鏈表的排序(插入法排序)?
int SertSortLinkList(LinkList*ll)
{LinkNode*pinsert = ll->head;LinkNode*ptmp = pinsert->next;LinkNode*next = ptmp->next;ptmp->next = NULL;ll->head->next = NULL;while (1) {pinsert = ll->head;while (pinsert->next&&ptmp->data.age>pinsert->data.age&&ptmp->data.age>pinsert->next->data.age){pinsert=pinsert->next;}if(pinsert->data.age>ptmp->data.age){ptmp->next=ll->head;ll->head=ptmp;}else{ptmp->next=pinsert->next;pinsert->next=ptmp;}ptmp=next;if(NULL==ptmp){break;}next=next->next;ptmp->next=NULL;}return 0;
}
7.循環鏈表
int circultlarLinkList(LinkList* ll)
{LinkNode* slow = ll->head;LinkNode* fast = ll->head;while(fast){fast =fast->next;if(NULL == fast){return 0;;}if(slow == fast){return 1;}fast =fast->next;slow = slow->next;}return 0;
}
三、順序表和鏈表的優缺點
1.存儲方式
- 順序表是一段連續的存儲單元
- 鏈表是邏輯結構連續物理結構(在內存中的表現形式)不連續
2.時間性能
(1)查找:順序表O(1)? 鏈表??O(n)
(2)插入和刪除:順序表?O(n)? 鏈表???O(1)
3.空間性能
- 順序表?需要預先分配空間,大小固定
- 鏈表,?不需要預先分配,大小可變,動態分配