這裡是水水水的資料結構課的筆記
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...