資料結構筆記

2021-09-28 23:57:10 字數 3027 閱讀 3169

本文主要記錄我自學資料結構時的一些重點筆記以便日後複習

data structure visualizations視覺化資料結構

@單鏈表的快速建立、反向輸出、刪除

完全二叉樹和堆的定義

演算法複雜度分析重要性

typedef

struct node

node;

typedef

struct btnode

btnode;

typedef

struct btnode

btnode,

*btnode;

可以看到在最後又多了個*btnode,其實在定義乙個結點指標p的時候,btnode *p;等價於btnode p;

對於定義結點指標,btnode *p;這種寫法是順理成章的,因為它繼承了之前int *a, char *b;的寫法這些指標定義的一般規律,使我們記憶起來非常方便,不必再加個btnode p;來增加記憶負擔,因此定義時最好不要用*btnode,統一乙個btnode解決所有問題

malloc函式用法——c語言

new運算子用法——c++語言

new速度快於malloc()

// 結構體指標的定義方法

typedef struct stu *linklist;

linklist head; // head是乙個指向結構體stu的指標

等價於struct stu *head;

本質:struct stu *簡寫為linklist,類似pair簡寫為pii

有兩種寫法

法1:

btnode bt;

// 製作乙個結點

法2:(最常用)

btnode *bt;

bt =

(btnode *

)malloc

(sizeof

(btnode));

// 此句要熟練記憶

法2』:

int

*p;p =

new element[n]

;delete p;

法2先定義了乙個結點的指標bt,然後用函式malloc()來申請乙個結點的記憶體空間,最後讓指標bt指向這片記憶體空間,這樣就完成了乙個結點的製作,考研中所有型別的結點的記憶體分配都可用函式malloc()來完成,模式固定,方便記憶

leetcode上面的鍊錶都是它事先建立好的,那如果我想自己建立乙個鍊錶,然後再去試驗各種鍊錶操作函式,則可以用如下**模版

#include

#include

#include

using

namespace std;

// 定義鍊錶結點

typedef

struct listnode

} listnode;

// 建立單鏈表(返回頭結點)

listnode *

create_linkedlist

(initializer_list<

int> lst)

// 單鏈表反向輸出(遞迴)

void

printreverse

(listnode *head)

// 刪除單鏈表

void

clear

(listnode *head)

}int

main()

);printreverse

(head)

;clear

(head)

;}

完全二叉樹定義:若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊

堆的定義:堆是乙個完全二叉樹,每個節點與其子節點位置相對。父節點總是大於或等於子節點,這種情況下被叫作大頂堆,或者父節點總是小於或等於子節點,這種情況下叫作小頂堆。注意,給定父節點的子節點不一定按順序排列

堆(堆像一棵倒過來的樹):是一種經過排序的樹形資料結構,每個結點都有乙個值。通常所說的堆的資料結構,是指二叉堆。堆的特點是根結點的值最小(或最大),且根結點的兩個子樹也是乙個堆。由於堆的這個特性,常用來實現優先佇列

很多學生,學了四年計算機專業,很多程式設計師,做了很長時間的程式設計工作,卻始終都弄不明白演算法的時間複雜度的估算,這是很可悲的一件事。因為弄不清楚,所以也就從不深究自己寫**是否效率低下,是不是可以通過優化讓計算機更加快速高效。

他們通常的藉口是,現在cpu越來越快,根本不用考慮演算法的優劣,實現功能即可,使用者感覺不到演算法好壞造成的快慢。可事實真是這樣嗎?即使cpu短短幾年速度提高了100倍,但乙個本可以是o(n)時間複雜度的演算法,卻寫出了o(n

2n^2

n2)的程式,僅僅因為容易想到,也容易寫。很明顯效率更高的會是o(n)的演算法,即使不提高cpu速度。愚公移山固然可敬,但發明炸藥和推土機,可能更加實在和聰明

——摘自《大話資料結構》

資料結構筆記

程式效率與組織方式有關 圖書館擺書 二分查詢 程式效率與操作有關 迴圈和遞迴 遞迴雖簡單不過耗費大量空間 程式效率與演算法有關 多項式求和 秦九韶要比普通演算法快乙個數量級 測試兩種演算法的 include include include define max 101 define maxl 1e7...

資料結構筆記

一 鄰接矩陣 鄰接矩陣儲存使用2個陣列儲存圖的資訊 1個以為陣列儲存頂點,乙個二維陣列儲存邊的資訊 1 二維陣列中的對角線為0,以為不存在頂點到自身的邊 2 要知道某個點的出度,就是頂點vi在第i行的元素之和,入度就是該頂點所在列的元素之和 3 頂點vi的所有鄰接點就是吧矩陣中第i行元素掃瞄一遍 4...

資料結構筆記

二叉樹的遍歷操作 二叉樹的遍歷是指從根結點出發,按照某種次序 訪問二叉樹中的所有結點,使得每個結點被訪問一 次且僅被訪問一次。抽象操作,可以是對結點進行的各種 處理,這裡簡化為輸出結點的資料。前序遍歷 中序遍歷 後序遍歷 層序遍歷 查詢的基本概念 靜態查詢適用於 查詢集合一經生成,便只對其進行 查詢...