資料的存放方式,體現了資料結構
資料結構=資料+結構,結構指儲存、操作、關係。
若用set儲存,則需要用insert插入元素,因為set是一顆紅黑樹。
由於set裡面元素單調,可用\(o(\log)\)二分法查詢,
陣列:連續的一段儲存空間
可\(o(1)\)查詢特定編號的元素,
鍊錶:鏈式結構
若動態指標實現,則可以做到:
struct node;
node *head;
核心**:
head=new node;
r=head;//r是乙個工作指標,也就是「掃瞄頭」
while(cin>>x)
1.動態分配記憶體空間
2.快速插入乙個節點
//在p和q之間插入數值x
node *r=new node;
r->data=x;
r->next=&q;
p.next=r;
若用靜態陣列來描述鍊錶,則用\(data_i\)表示第i個元素的data值,用\(next_i\)表示第i個元素的下乙個元素值
應用:鏈式前向星
struct nodev[nmax];
struct edgee[mmax];
實現:
void add(int u,int v,int w)
棧:filo
應用:進製轉換,括號匹配,中綴表示式轉字尾
\(3*8-(6-2)/(3+4)\) ==> \(3,8,*,6,2,-,3,4,+,/,-\)
\(f(t)=-ce^+\intdt}\) ==>
\(t,f=-c,-k,t,*,exp,*,t,f_e,-k,t,*,exp,*,\int,+\)
表示式壓棧規則:
\(op(v)=\beginpop(),\text(v)
單調棧:
\(op(v)=\beginpop(),v
這樣棧裡的元素就是單調的了。
e.g.histogram
給出乙個柱狀統計圖,他的每乙個專案的寬度是1,高度和具體問題有關,求柱狀圖中最大長方形面積。
即:給定\(\\),求出\(ans=\max\limits_
其中\(h_=\min\limits_\leq}a_\)
int top=0,s[maxn];
int area=0;
for(int i=1;i<=n;i++)
e.g.求最長不下降子串行優化單調棧:\(\text(i,x)=\begin\text(i-1,x),v>s_i\\s_i=v,else\end\)
佇列:fifo
e.g.集合劃分
給定集合\(a=\\)和由01矩陣構成的衝突關係\(r_=\begin0,\text\\1,\text\end\),且\(r_=r_\),\(r_=0,i,j=1,2,...,n\),將\(a\)劃分成\(k\)個互不相交的子集,且對於任意子集\(a_i\)和\(x,y\in\),都有\(r_=0\),求出使得k最小的劃分方案。
分析:申請以下變數:
int r[nmax][nmax];//衝突矩陣
int newr[nmax];//工作陣列
int cq[nmax];//迴圈佇列
int result[nmax];//記錄分組數
int group=1;//記錄總共組數
工作過程:
\((1)\ cq_i\gets\quad newr\gets}\quad result\gets}\)
\((2)\ newr_i\gets}\)
\((3)\ v\gets}\quad cq.\text\)
\(\quad \text(v)=\begin\text(v),\quad r_=1\\newr_i\gets,\quad else\end\)
$(4)\ \mu \ \text\ cq \ \text $
e.g.滑動視窗
筆記 資料結構
解釋經典例題 計算給定多項式在給定點x處的值。f x a0 a1 x a n 1 x n 1 a n x n 方法一 double num int n,double array,double x 改進方法 double num int n,double array,double x clock 捕捉...
學習筆記 資料結構
一 常用的資料結構 1 線性資料結構 元素之間一般存在元素之間存在一對一關係,是最常用的一類資料結構,典型的有 陣列 棧 佇列和線性表 2 樹形結構 結點間具有層次關係,每一層的乙個結點能且只能和上一層的乙個結點相關,但同時可以和下一層的多個結點相關,稱為 一對多 關係,常見型別有 樹 堆 3 圖形...
Python筆記 資料結構
list list是python內建的一種資料型別。list是一種 有序的集合,可以隨時新增和 刪除其中的元素。定義列表的方法就是 例如 classmates michael bob tracy 支援按照索引訪問和刪除 支援在列表尾端插入和刪除 列表中的元素的型別可以不統一 tuple tuple是...