王道考研 資料結構 筆記

2022-07-21 19:45:14 字數 3638 閱讀 6598

上面這張圖來自課件,發現這張圖將計算機四大基礎學科之間的關係很好的體現出來了,故貼在這。

資料元素、資料項

資料元素是資料的基本單位。資料元素由資料項組成。

如,在飯館排隊的顧客,可用以下資料元素和資料項表示:

資料結構、資料物件

資料結構是相互之間存在一種或多種特定關係的資料元素的集合。

資料物件是具有相同性質的資料元素的集合,是資料的乙個子集。

索引儲存:

initlist(&l):初始化表。構造乙個空的線性表 l,並分配記憶體空間。

destroylist(&l):銷毀表,並釋放線性表 l 占用的記憶體空間。

listinsert(&l, i, &e):插入操作。在表 l 的第 i 個位置插入指定元素 e 。

listdelete(&l, i, &e):刪除操作。刪除表 l 中第 i 個位置的元素,並用 e 返回刪除元素的值。

locateelem(l, e):按值查詢。在表 l 中查詢具有給定元素值的元素。

getelem(l, i):按位查詢。獲取表 l 中第 i 個位置的元素的值

其他常用操作

length(l):求表長。返回線性表 l 的長度,即表中元素的個數。

printlist(l):列印表。按順序輸出線性表 l 的所有元素值。

empty(l):判斷是否為空。若 l 為空表,則返回 true,否則返回 false。

tips:

運算元據結構的思路:創銷、增刪改查。

實際開發中,可根據實際需求定義其他操作。

關於引用&:引用運算子是 c++ 中的運算子,c 中沒有這種操作。

比起學會「how」(怎麼做),更重要的是想明白「why」(為什麼要這麼做)。

如何獲取資料元素的長度?

使用sizeof()函式。

2.2.1 順序表的定義

用順序儲存的方式實現線性表。順序儲存,也就是將邏輯上相鄰的元素儲存在相鄰的物理位置上。

2.2.2 順序表的實現

靜態分配

用靜態分配的方式實現順序表,表的長度後續不可再發生改變。

**實現示例:

#define maxsize 10 // 定義最大長度 

typedef struct sqlist;

// 初始化順序表

void initlist(sqlist &l)

int main()

動態分配

#define initsize 10 // 順序表的初始長度

typedef struct sqlist;

// 初始化順序表

void initlist(sqlist &l)

// 增加動態陣列的長度

void increasesize(sqlist &l, int len)

int main()

2.2.3 順序表的特點

靜態分配與動態分配的對比

靜態分配無法拓展容量,動態分配可以拓展容量。

2.2.4 順序表的基本操作

1. 插入

#define maxsize 10 // 定義最大長度 

typedef struct sqlist;

bool listinsert(sqlist &l, int i, int e)

int main()

時間複雜度分析2. 刪除

#define maxsize 10 // 定義最大長度 

時間複雜度分析

3. 查詢

a. 按位查詢

getelem(l, i)

/* 靜態分配的按位查詢 */ 

#define maxsize 10 // 定義最大長度

typedef struct sqlist;

elemtype getelem(sqlist l, int i)

/* 動態分配的按位查詢 */ 

#define initsize 10 // 順序表的初始長度

typedef struct sqlist;

elemtype getelem(sqlist l, int i)

時間複雜度分析由於元素連續存放,可以根據起始位址和元素大小立刻找到元素——隨機訪問特性。

最好時間複雜度 = 最壞時間複雜度 = 平均時間複雜度 = o(1)

b. 按值查詢

locateelem(l, e)

#define initsize 10 // 順序表的初始長度 

typedef struct sqlist;

// 查詢第乙個元素值為e的元素,並返回其位序

int locateelem(sqlist l, elemtype e)

時間複雜度分析

c 中不能用==判斷兩個結構體是否相等

王道考研資料結構筆記之演算法分析

演算法是對特定問題求解步驟的一種描述,它是指令的有限序列。具有下列五個重要特性 乙個好的演算法應該達到一下目標 演算法效率的度量 1 時間複雜度 乙個語句的頻度是指該語句在演算法中被重複執行的次數。演算法中所有語句的頻度之和記為t n 時間複雜度主要分析t n 的數量級。演算法中基本運算 最深層迴圈...

2021 王道考研 資料結構 習題講解

2021王道資料結構高畫質pdf p1 2021版 0.0 課程指南 p2 2021版 1.1.0 開篇 資料結構在學什麼 p3 2021版 1.1.1 資料結構的基本概念 p4 2021版 1.2.1 演算法的基本概念 p5 2021版 1.2.2 演算法的時間複雜度 p6 2021版 1.2.3...

王道考研資料結構佇列 綜合習題題解

q1 使用tag標籤判斷隊滿隊空。寫出出入隊的操作。ans 我直接給出抽象資料型別吧。include define maxsize 50 using namespace std class cyclequeue cyclequeue cyclequeue cyclequeue enqueue int...