1、鍊錶 雙向鍊錶:每個資料結點中都有兩個[指標],分別指向直接後繼和直接前驅 單向鍊錶:鍊錶的鏈結方向是單向的,對鍊錶的訪問要通過順序讀取從頭部開始;鍊錶是使用指標進行構造的列表;又稱為結點列表,因為鍊錶是由乙個個結點組裝起來的;其中每個結點都有指標成員變數指向列表中的下乙個結點 迴圈鍊錶:表中最後乙個結點的指標域指向頭結點,整個鍊錶形成乙個環 class linklist } 增刪改查操作 修改鍊錶的指標的指向
佇列:是一種採用先進先出(fifo)策略的抽象資料結構 通常使用鍊錶形式來實現佇列,使用單向鍊錶來實現鏈式佇列,鏈式佇列中儲存front和rear即可 typedef struct node node;
typedef struct queue ; 判斷佇列是否為空: bool isempty(queue *q)
棧(stack)在電腦科學中是限定僅在表尾進行插入或刪除操作的線性表。棧是一種資料結構,它按照後進先出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料。棧是只能在某一端插入和刪除的特殊線性表。
2、swift演算法實現之鍊錶倒數第k個結點 使用兩個指標實現,首先將第乙個指標pnode前進 k 步,然後qnode才開始前進,後面pnode、qnode同時往前移動,當pnode指向尾結點時,pnode指向的結點就是倒數第k個結點
3、陣列**現次數超過一半的數字**自 解法1:先將陣列進行排序,排過序之後求陣列中間的那個數字,該數字就是那個出現次數超過一半的數字 解法2:借助 hash 表實現,hash 表的鍵值(key)為陣列中的數字,值(value)為該數字對應的次數。然後直接遍歷整個 hash 表 ,找出每乙個數字在對應的位置處出現的次數,輸出那個出現次數超過一半的數字即可。 解法3:遍歷陣列,比較相鄰的兩個數字,如果這兩個數字不相等則同時刪除這兩個數字(不管是不是我們要查詢的那個出現次數超過一半的數字),如果相等則保留這兩個數字,從這兩個數字中的後乙個數字繼續往後遍歷,最後剩餘的數字就是那個出現次數超過一半的數字。 解法4:在遍歷陣列的時候儲存兩個值:num(用來儲存陣列中遍歷到的某個數字)和count(用來表示當前數字的出現次數),count初始化為1。當我們遍歷到陣列中下乙個數字的時候: 如果下乙個數字與之前num儲存的數字相同,則count加1; 如果下乙個數字與之前num儲存的數字不同,則count減1; 每當出現次數count變為0後,用num儲存下乙個數字,並把count重新設為1。 直到遍歷完陣列中的所有數字為止。
4、逐字翻轉字串 」the sky is blue」—>」blue is sky the」 兩次翻** 第一次翻轉,整體翻**」the sky is blue」 -> 「eulb si yks eht」 第二次翻轉,單詞翻**」eulb si yks eht」 -> 「blue is sky the」
5、lru演算法 快取淘汰演算法(最近最少使用) 最常見的實現是使用乙個鍊錶儲存快取資料
新資料插入到鍊錶頭部;
每當快取命中(即快取資料被訪問),則將資料移到鍊錶頭部;
當鍊表滿的時候,將鍊錶尾部的資料丟棄。
6、mru(最近最常使用演算法)
資料結構和演算法
判斷乙個演算法的效率時,函式中的常數和其它次要項常常可以忽略,而更應該關注主項 最高項 的階數。演算法時間複雜度的定義 在進行演算法分析時,語句中的執行次數t n 是關於問題規模n的函式,進而分析t n 隨n的變化情況並確定t n 的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作 t n ...
資料結構和演算法
程式是什麼?好多書上都寫著 程式 資料結構 演算法。可是怎麼去理解呢?好多程式設計人員對資料結構和演算法說不上熟悉,因為在他們所從事的工作中很少用到這些知識點。但並不表示他們不重要。還有一些人是這樣的想法 大公司才會注重這些知識點,小公司可能就不注重了。寫這篇文章之前我也是持這種想法的。但是,此時此...
資料結構和演算法
一 資料結構 1.概念 資料結構就是資料之間的結構關係,或者理解成資料元素之間存在的一種或者多種特定關係的集合,在傳統上資料結構分為邏輯結構與物理結構 1 邏輯結構 只反映資料元素之間的邏輯關係的資料結構,其中的邏輯關係是指資料元素之間的前後關係,而與他們在計算機中的儲存位置無關,有以下四類 集合結...