DataStructure 線性表 棧 佇列

2021-09-26 20:54:16 字數 4545 閱讀 8810

這裡是水水水的資料結構課的筆記

1.線性表:一些無腦的操作

低配vector,線性表無序有序都可以通過下標快速訪問。

但是修改操作耗時大,建議不太靈活,多組讀取的資料使用

#include

using

namespace std;

template

<

typename e>

class

list

list

(const list&

)public

:list()

;virtual

~list()

virtual

void

clear()

=0;virtual

void

(const e&);

virtual e remove()

=0;virtual

void

movetostart()

=0;virtual

void

movetoend()

=0;virtual

void

pre()=

0;virtual

void

nxt()=

0;//帶const的函式只能讀取資料成員 不能修改

virtual

intlength()

const=0

;virtual

intcurrpos()

const=0

;virtual

void

movetopos

(int pos)=0

;virtual

const e&

getval()

const=0

;protected:}

;template

<

typename e>

class

alist

~alist()

void

clear()

void

insert

(const e& it)

listarray[curr]

=it;

listsize++;}

void

(const e& it)

e remove()

listsize --

;return tmp;

}void

movetostart()

void

movetoend()

intlength()

const

intcurpos()

const

void

movetopos

(int pos)

void

nxt(

)void

pre(

)const e&

getval()

void

reverse()

}void

print()

protected:}

;

2.鍊錶

鍊錶的插入刪除較為簡便,但是查詢元素比較不划算

#include

using

namespace std;

//乙個雙向鍊錶的節點內容,包括資料,pre,與nxt

template

<

typename e>

struct link

e data;

link

*nxt,

*pre;};

template

<

typename e>

class

list

//複製建構函式

list

(const list & l)

first=

new link

(l.first-

>data)

; src=l.first;

dup=first;

while

(src-

>nxt !=

null

) last=dup;

listsize=l.listsize;

}//析構函式

~list()

}///列印鍊錶內容

void

print()

return;}

//在末尾插入元素

void

push_back

(e t)

else

listsize++;}

void

del(

int pos)

;//合併鍊錶 建新鍊錶

void

merge

(list

&t)else

}while

(t1!=

null

)while

(t2!=

null

) c.

print()

;}private

:protected

: link

*first,

*last;

int listsize;};

intmain()

*嚶 乙個無用的鍊錶倒置

#include

#include

#include

using

namespace std;

template

<

typename e>

struct listnode

;template

<

typename e>

listnode

*reverse

(listnode

*phead)

//head無實際意義 head->nxt是第乙個元素

listnode

*pcur=phead-

>nxt,

*ppre=

null

,*pnxt;

while

(pcur!=

null

) pcur-

>nxt=ppre;

//前乙個更新

ppre=pcur;

//下乙個更新 記錄好啊

pcur=pnxt;}}

intmain()

cur-

>nxt=

null

; listnode <

int>

*tmp=head-

>nxt;

while

(tmp!=

null

) cout

"after reverse: "

;reverse

(head)

; tmp=head-

>nxt;

while

(tmp!=

null

) cout

}

3.棧 - 手寫**好

先進後出(filo)的資料結構,可以用來處理字元匹配的問題

#include

#define ll long long

//計算fabi函式 用棧代替

using

namespace std;

int n;

template

<

typename e>

class

stack

int top;

e s[

100000];

void

push

(e x)

e pop()

e top()

private

:protected:}

;void

work()

}int

main()

4.佇列

先進先出(fifo)的資料結構,比棧多了個頭,寫起來蠻順手的,不像鍊錶…

#include

using

namespace std;

template

<

typename e>

class

aqueue

~aqueue()

void

clear()

void

add(

const e& it)

e del()

const e&

getfont()

const

virtual

intlength()

const

void

judge()

else}}

;int

main()

DataStructure 8 查詢技術

8.1概述 1 查詢方式分類 靜態查詢 不涉及插入 刪除操作的查詢 動態查詢 涉及插入 刪除操作的查詢 2 查詢結構 線性表 適用於靜態查詢,主要採用順序查詢技術,折半查詢技術.樹表 適用於動態查詢,主要採用二叉排序樹查詢技術.雜湊表 靜態查詢和動態查詢均適用,主要採用雜湊技術.3 查詢演算法的效能...

data structure 之棧與佇列

問題一 用兩個佇列實現乙個棧 思路 定義兩個佇列分別為q1,q2。呼叫棧的push操作時,直接將元素push到佇列q1中,時間複雜度為o 1 呼叫棧的pop操作時,先把q1中的q1.size 1個元素push到q2中,然後再pop出q1中的最後乙個元素,再把q2中的所有元素全部push到q1中,時間...

DataStructure 排序 原始碼實現

本篇部落格實現了 1.氣泡排序 2.氣泡排序的一種優化 當某次冒泡沒有進行交換時,退出迴圈 3.選擇排序 4.歸併排序 5.快速排序。主要是原始碼的實現,並將自己在敲的過程中所遇到的一些問題記錄下來。include include include using namespace std int nu...