原创 【數據結構】(二叉排序樹)判斷一顆二叉樹是否是二叉排序樹

算法思想: 二叉排序樹的中序遍歷是有序(從小到大的)的我們只要按照二叉樹中序輸出的遞歸代碼模板每次輸出是與上一次輸出的進行比較即可 注意:二叉樹中序遞歸模板見----->傳送門 int JudgeBST(BSTree *roo

原创 【數據結構】(平衡二叉樹)判斷二叉樹是否是平衡二叉樹

算法思想:判斷一棵樹是否爲平衡二叉樹可以採取高度差的遞歸方式來判斷這個方法比較簡單但是複雜度較高(因爲高度被重複計算了很多次)O(nlogn) //遞歸求高度 int height(BSTree *root){ if(!r

原创 【數據結構】(單鏈表)找出兩個鏈表的公共元素並 放在鏈表C中,要求不破壞AB鏈表

算法思想:尋找公共元素,即尋找兩個鏈表中值相等的元素,默認鏈表有序,只需要遍歷比較即可,詳見代碼 LinkList Get_Common(LinkList A,LinkList B){ if(A->next==NULL||B

原创 【數據結構】(循環鏈表)單鏈表查詢倒數第k個節點方案

算法思想:定義兩個指針p,q ,q先走k步,之後p,q同時移動 p所指向的即爲所求 int Search_k(LinkList A,int k){ if(A==NULL||A->next==NULL) return

原创 【數據結構】(單鏈表)遞歸刪除值爲 x的節點(不帶頭節點)

算法思想:其實就是遞歸查找然後判斷刪除。注意:這裏由於傳遞的是引用所有不會斷鏈 void Delete_x(LinkList &head,int x){ if(head==NULL) return; if(head->da

原创 【數據結構】(單鏈表)找到兩個鏈表的公共元素

算法思想:這個題目我沒有做測試,寫一下大概思路,就是讓長的鏈表先走長的那幾步,等到兩個鏈表一般長的時候就一起走找到相同的結點 //獲取鏈表長度 int getLength(LNode *p){ int i=0; whi

原创 【數據結構】(單鏈表)將一個鏈表分爲兩個帶頭節點鏈表其中鏈表A含有原表中序號爲奇數的元素 鏈表B含有原表中序號爲偶數的元素

算法思想:這個就比較簡單了就是,定義一個計數器判斷當前計數器是技術還是偶數然後通過頭插法,或者尾插法建立鏈表即可 LinkList DisCreate_1(LinkList &A){ if(A->next==NULL) re

原创 【數據結構】(單鏈表)求兩個鏈表的交集

算法思想:其實就是合併鏈表相同的元素(假設鏈表有序) void Union(LinkList &A,LinkList &B){ if(A->next==NULL||B->next==NULL) return

原创 【數據結構】(單鏈表)單鏈表冒泡排序

算法思想:冒泡排序的核心思想爲 內存循環每次冒泡出一個最大的數到尾端 void BubbleSort(LNode *&head){ if(head->next==NULL||head->next->next==NULL

原创 【數據結構】(循環鏈表)鏈接循環單鏈表

算法思想:這個就很簡單了就是找尾指針的過程進行解鏈,和鏈接就行 void Link_A_B(LinkList &A,LinkList &B){ if(A->next==NULL||B->next==NULL) retur

原创 【數據結構】(單鏈表)帶頭結點刪除最小值元素

算法思想:while 循環 找出最小節點的前驅節點 以及最小值節點 之後刪除即可 void Delete_Min(LNode *&head ){ if(head ->next==NULL) return; LNod

原创 【數據結構】(循環鏈表)反覆找出單鏈表中的最小值並輸出直到循環單鏈表爲空 然後釋放循環單鏈表的頭結點

算法思想:使用雙重for循環尋找最小值結點 void Del_All(LinkList &d){ printf("%p\n",d); if(d==NULL) return; if(d->next==d){ fre

原创 【數據結構】(循環鏈表)判斷循環雙鏈表是否對稱

算法思想: 正反向同時遍歷查看節點的值是否相等,兩個指針同時遍歷 int Symmerty(DLinkList &d){ if(d->next==NULL) return 0; DLinkList pr

原创 【數據結構】(單鏈表)帶頭鏈表就地逆置

帶頭鏈表就地逆置(就地的意思爲 空間複雜度爲1) 方法一 算法思想:鏈表的逆置採用非遞歸的方法使用了三個指針詳見代碼 // 帶頭鏈表就地逆置(就地的意思爲 空間複雜度爲1) void Reverse2(LNode *&hea

原创 【數據結構】(循環鏈表)刪除無序表中 絕對值相同的元素要求時間最優解 本題採用 空間換時間

時間複雜度O(m) 空間複雜度O(n) 其中數組的最大值 |data|<n 注:若不給最大值可以求鏈表最大值與最小值想減進行映射 算法思想:使用輔助數組來記錄鏈表中結點出現的次數,若出現兩次以上則刪除該鏈表 void D