資料結構和演算法 以及leetcode整理

2021-08-15 04:11:59 字數 1140 閱讀 5735

第一部分:線性表的學習001

線性表包括陣列和鍊錶兩種,陣列是採用連續的儲存空間,陣列具有隨機儲存的特性,什麼是隨機儲存特性,也就是說num[i] 的時間複雜度是o(1),陣列的缺點在於:在頭部插入時 時間複雜度為o(n),頭部刪除時時間複雜度為o(n).插入刪除的平均時間複雜度為o(n-1/2). 陣列是連續的而儲存空間,所以儲存空間是固定的,遇到儲存空間不足的時候需要擴充儲存空間,比較麻煩。

c++中陣列是一種基本資料結構  int array, vector等來表示陣列 vector是封裝好的陣列,最常使用leetcode中關於陣列的題是在是太多了,在下面的章節的內容中會對陣列部分的題型進行歸納;(陣列解決問題的方法比較相似)

為了克服陣列連續儲存的弊端,可以採用鍊錶等來表示線性儲存結構,鍊錶由資料域和指標域構成,所以實現的時候使用類或者是結構體來表示。(單鏈表)

struct listnode

鍊錶不具有隨機儲存特性,鍊錶的優勢在於1)不用考慮記憶體的大小 2)增加資料或者刪除資料的時間複雜度為o(1), 鍊錶的構建分為頭插法:

listnode *head;

head->next=null;

listnode *p=new listnode(-1);

p->next=head->next;

head->next=p;

當然也可以是尾插法建表:

listnode *head;

head->next=null;

listnode *p=new listnode(-1);

listnode *tail;

tail->next=p;

tail=tail->next;

鍊錶比較常用的是增加和刪除,下面是單鏈表的p結點後面新增s結點的通用**
s->next=p->next;

p->next=s;

刪除結點的通用**(首先需要找到刪除結點的前乙個結點)
listnode *p=s->next;

s->next=s->next->next;

delete p;

leetcode中關於鍊錶的體也有不少,將在後面的章節中繼續介紹,主要的關鍵點是鍊錶的邊界條件比較複雜;

資料結構以及常見演算法

資料結構 1 陣列 雜湊表 棧 佇列 鍊錶 樹 圖等等的定義 2 資料結構的遍歷 a 陣列 通過下標就可以遍歷 常見題目 1 陣列下標是0到n 1的數字,如果陣列元素是0到n 1的數字的時,這種題目經常會構成閉環,以元素作為下標之類。比如0到n中重複的元素,100死囚犯問題等等。2 陣列遍歷方向問題...

資料結構和演算法

判斷乙個演算法的效率時,函式中的常數和其它次要項常常可以忽略,而更應該關注主項 最高項 的階數。演算法時間複雜度的定義 在進行演算法分析時,語句中的執行次數t n 是關於問題規模n的函式,進而分析t n 隨n的變化情況並確定t n 的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作 t n ...

資料結構和演算法

程式是什麼?好多書上都寫著 程式 資料結構 演算法。可是怎麼去理解呢?好多程式設計人員對資料結構和演算法說不上熟悉,因為在他們所從事的工作中很少用到這些知識點。但並不表示他們不重要。還有一些人是這樣的想法 大公司才會注重這些知識點,小公司可能就不注重了。寫這篇文章之前我也是持這種想法的。但是,此時此...