資料結構與演算法(C 實現)學習筆記(五)

2021-09-26 21:21:23 字數 2045 閱讀 3230

陣列的缺點:在有序陣列插入資料的時候,後面的資料需要向後移動;在有序陣列中刪除資料時,後面的陣列元素需要向前移動,導致速度相對較慢。

下圖是在有序陣列中刪除元素202的示意圖。

鍊錶的提出:鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點(鍊錶中每乙個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。 鍊錶允許插入和移除表上任意位置上的節點,但是不允許隨機訪問。

在鍊錶中插入/刪除元素,不需要移動,下圖是在已經排好序的陣列中插入元素200的示意圖。

以友元類實現如下鍊錶:

以巢狀類實現如下鍊錶:

**示例:

#ifndef threeletterlist_h

#define threeletterlist_h

#includeclass threeletterlist

; threeletternode* first;

};void threeletterlist::test()

void threeletterlist::show()

#endif

#include#include "threeletterlist.h"

using namespace std;

class list;

class node

;class list

;void list::test()

void list::show()

int main()

鍊錶功能:插入:insert()、刪除:delete()、反**invert()、連線:concatenate().

**示例:

#ifndef mylist_h

#define mylist_h

#includetemplate class list;

template class listnode

;template class list

;//空列表

void insert(type);

void delete(type);

void invert();

void concatenate(list);

void show();

private:

listnode*first;

};template listnode::listnode(type element)

templatevoid list::insert(type k)

templatevoid list::delete(type k)

}templatevoid list::invert()

first = q;

}templatevoid list::concatenate(listb)

; if (b.first)

}templatevoid list::show()

std::cout << std::endl;

}#endif

#include#include"mylist.h"

using namespace std;

int main()

資料結構與演算法(五)

雙端鍊錶和雙向鍊錶 一.雙端鍊錶 1.什麼是雙端鍊錶 鍊錶中儲存著對最後乙個鏈結點的引用的鍊錶 2.從頭部進行插入 要對鍊錶進行判斷,如果為空則設定尾結點為新新增的結點。3.從尾部進行插入 如果鍊錶為空,則直接設定頭結點為新新增的結點,否則設定尾結點的後乙個結點為新新增的結點。4.從頭部進行刪除 判...

資料結構與演算法(五)

三根針xyz,x上64個圓盤 設計思路 if n 1時,x z else 執行n 1的操作,直到n 1 1 由零個或多個字元組成的有限序列 是用一組位址連續的儲存單元來儲存串中的字串行,按照預定義的大小,為每個定義的字串變數分配乙個固定長度的儲存區,一般用定長陣列來定義 一般用順序儲存 樸素的模式匹...

資料結構與演算法學習筆記五 氣泡排序演算法

氣泡排序演算法原理 從未排序的序列的開頭開始,比較相鄰的兩個元素,將值大 小 放在右邊,每輪比較完成都會將最大 最小 放在最後一位,下一輪就只要從開頭比較到倒數第二個。以此類推,直到序列排序完畢。對於乙個有n個元素的序列,需要進行 n 1 輪迴圈比較.如下 ef bubble sort alist ...