一、快排:
#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 而不直接使用...