常用模板 (個人習慣)

2021-09-30 15:50:25 字數 4081 閱讀 9788

一、快排: 

#include using namespace std;

bool compare(int a,int b)

sort(a,a+n,cmp);

先按x公升序排序,若x值相等則按y公升序排:

int cmp( const node &a, const node &b )

else

return 0;

}sort(a,a+n,cmp);

#include #include #include struct node

;char st1[50];

char st2[50];

1、按先序遍歷輸入的字串行:

struct node * creat()

else

return root;

}2.已知前序遍歷和中序遍歷,求二叉樹。

struct node * creat(char *st1, char *st2, int n)

3.已知中序遍歷和後序遍歷,求二叉樹。

struct node *creat(char *st1, char *st2, int n)

4.層次遍歷:

void level(struct node *root)

x++;

}}5、求二叉樹的高度

int deep(struct node *root)

6、求葉子數。

int leaf(struct node *root)

7、按從上到下從左到右的順序輸出二叉樹的葉子結點。

void leaf(struct node *root)

x++;

}}8、後序輸出:

void after(struct node *root)

}

三、深搜和廣搜:

1、鄰接矩陣:

void dfs(int i)

f;vector g[maxn];

初始化:

void initvector()

memset(visit, 0, sizeof(visit));

}輸入:

while(m--)

dfs:

void dfs(int start)

五、並查集:

int find(int x)

int l;

l = x;

while(l!=r)

return r;}

void join(int x, int y)

}

五、棧和佇列以及常用c++函式:

1.stack

top()返回棧頂元素,並不移除這個元素

empty()如果棧空返回true,否則false

size()棧的大小

void push()插入元素到棧頂

void pop()移除棧頂元素

2.queue

empty()判空

front()返回隊頭元素

pop()刪除對頭元素

back()返回隊尾元素

push()在隊尾加入元素

size()大小

3、不定長陣列:vector

vector就是乙個不定長陣列。

它把一些常用操作「封裝」在了vector型別內部。

基本操作

(1)標頭檔案#include;

(2)建立vector物件,vectorvec;

(3)尾部插入數字:vec.push_back(a);

(4)使用下標訪問元素,coutfor(it=vec.begin();it!=vec.end();it++)

cout<<*it<(6)插入元素:vec.insert(vec.begin()+i,a);在第i個元素後面插入a;

(7)刪除元素:vec.erase(vec.begin()+2);刪除第3個元素

vec.erase(vec.begin()+i,vec.end()+j);刪除區間[i,j-1];區間從0開始

(8)向量大小:vec.size();

向尾部新增元素:vec.push_back();

刪除最後乙個元素:vec.pop_back);

(9)清空:vec.clear()   //清空之後,vec.size()為0

vectorg[maxn];

void init()

c.back() // 傳回最後乙個資料,不檢查這個資料是否存在。

c.capacity() // 返回容器中資料個數。

c.empty() // 判斷容器是否為空。

c.end() // 指向迭代器中末端元素的下乙個,指向乙個不存在元素。

c.front() // 傳回第乙個資料。

c.insert(pos,elem) // 在pos位置插入乙個elem拷貝,傳回新資料位置。

c.insert(pos,n,elem) // 在pos位置插入n個elem資料。無返回值。

c.insert(pos,beg,end) // 在pos位置插入在[beg,end)區間的資料。無返回值。

c.max_size() // 返回容器中最大資料的數量。

c.pop_back() // 刪除最後乙個資料。

c.push_back(elem) // 在尾部加入乙個資料。

c.rbegin() // 傳回乙個逆向佇列的第乙個資料。

c.rend() // 傳回乙個逆向佇列的最後乙個資料的下乙個位置。

c.resize(num) // 重新指定佇列的長度。

c.reserve() // 保留適當的容量。

c.size() // 返回容器中實際資料的個數。

c1.swap(c2)

swap(c1,c2) // 將c1和c2元素互換。同上操作。

4.map的基本操作函式:

#include c++ maps是一種關聯式容器,包含「關鍵字/值」對

clear() 刪除所有元素

count() 返回指定元素出現的次數

empty() 如果map為空則返回true

erase() 刪除乙個元素

find() 查詢乙個元素

insert() 插入元素

max_size() 返回可以容納的最大元素個數

size() 返回map中元素的個數

swap() 交換兩個map

六、圖論(最短路問題):

dijkstra演算法:

int dijkstra(int n, int endd)

vis[k] = 1;//標記查詢到的最近點

//判斷是直接v[0]連線v[j]短,還是經過v[k]連線v[j]更短

for(int j = 1; j <= n; j++)

}return dis[endd];//endd為所求終點。

}struct node

};vector mp[maxn];

spfa演算法:

void spfa_bfs(int start, int n)

dis[start] = 0;

q.push(start);

while(!q.empty())

if(cnt[e.v]++>n)//判斷負環;bfs版的判斷標準:是否存在某個節點入隊超過n次 ;}}

}}dfs:

void dfs(int u)

dis[start] = 0;

cnt[start] = 1;

q.push(start);

while(!q.empty())}}

}}floy演算法:

void floy(int x, int y, int n)}}

}}

個人編碼模板

1.4.1 一般性原則 1.4.2控制項命名原則 備註 各個控制項以首字母縮寫為基本原則,個別控制項可根據實際情況使用全命名方式,但必須小寫開頭,命名字首一覽 應該包含如下 檔案描述 description 描述此類的作用 作者 author 建立者或者修改者名 版本 version 建立或者修復時...

個人對習慣培養的拙見

幾乎所有的書籍裡面都會提到乙個概念,那就是習慣,以及如何習慣的養成。可以說,好的習慣意味著更好的時間管理。通常在我們的日常工作學習中,有一些好習慣 這些習慣對於時間的節省和精力的保持都有很積極的作用。tips 找到自己一天中效率最高的時間段。有研究表明,大多數人的最高時段,是在起床以後,通常是一天中...

PHP常用開發習慣

1.使用內嵌的html 而不是php的echo語句。因為php是一門嵌入式web程式語言,可以將html 和php 相互嵌入。但是很多程式設計師擔心在html 中過多的使用 嵌入php 會多次呼叫php直譯器,從而降低了php 的執行速度,所以寧願使用php的echo語句來輸出html 而不直接使用...