/*首先有個關於指標的問題:
如果函式傳進來乙個指標*p,函式裡操作p不會影響原來的值,而如果有*或者->才會改變
比如:malloc的時候傳入指標的指標才行;o(1)刪除節點時末尾必須要便利一遍;刪除頭指標要變為刪除第二個節點。
1.o(1)刪除指定位置的節點
如果為最後乙個節點還是必須遍歷一遍
2.倒數第k個節點
if(!phead || !k) return ;//k等於0都不行
節點數目少於k個
3.找鍊錶中間位置的節點
4.兩個有序鍊錶的合併
5.倒轉單向鍊錶
6.鍊錶的歸併排序
7.兩個鍊錶的第乙個公共節點
8.求鍊錶第乙個進入環的節點
如果用hasho(n)的時間空間;
遍歷的時候,反轉next指標,有環就回到頭指標了。但是修改了值;
設乙個快指標和慢指標,有環就相遇。注意快指標q=q->next;if(!q)return;
找出入口:
當fast若與slow相遇時,slow肯定沒有走遍歷完鍊錶,而fast已經在環內迴圈了n圈(1<=n)。
假設slow走了s步,則fast走了2s步(fast步數還等於s 加上在環上多轉的n圈),設環長為r,
則:s = nr設整個鍊錶長l,入口環與相遇點距離為x,起點到環入口點的距離為a。
a + x = nra + x = (n – 1)r +r = (n-1)r + l - aa = (n-1)r + (l – a – x)(l – a – x)
為相遇點到環入口點的距離,由此可知,從煉表頭到環入口點等於(n-1)迴圈內環+相遇點到環入口點
於是我們從煉表頭、與相遇點分別設乙個指標,每次各走一步,兩個指標必定相遇,
且相遇第一點為環入口點。
*/#include
#include
#include
using namespace std;
struct node;
node* add(node *phead, int val)
}void del(node *phead,int val)else
}if(pd != null)
}/*o(1)時間刪除乙個節點*/
void del(node *phead,node *ptobedeleted)elseelse}}
delete pd;
pd = null;
}
《資料結構》讀書筆記
2010年9月2日開始研究 資料結構基礎 這本書。為什麼要說是研究呢,一是覺得研究這個詞比較賞心悅目,總比 看 閱讀 之類的好聽多了。二是真的想把資料結構學好。488頁,看來有忙活的了!第一章 基本概述 生命週期各階段描述及理解 1.需求階段 所有人規模程式設計專案,都是從確定規範宣告開始,規範宣告...
資料結構讀書筆記2
一切為了 merge 1.大話資料結構 1.個人感覺,這一塊 大話資料結構 作者搞的略混。也有少許我不贊成的地方,會在之後的工作中,改正我認為不完美的地方。2.畢竟現在不是大師,改正過程中我會以實際執行為標準,並且查閱相關的大牛們編著的書籍。3.正如我開頭所說一切為了merge,形成自己的知識體系才...
大話資料結構讀書筆記
第一章 資料結構的定義 資料就夠是相互直接存在一種或多種特定關係的資料元素的集合 邏輯結構 集合結構 線性結構 樹形結構 圖形結構 第二章 演算法 1 演算法的特性 輸入 輸出 有窮性 確定性和可行性 2 演算法事假複雜度定義 在進行演算法分析時,語句總的次數t n 第三章1 線性表 定義 零個或多...