常見數據結構與C++實現

1. 線性表

順序表

#include <iostream>
#include <vector>

using namespace std;
void print_vector(vector<auto> vec){
	for (auto i:vec){
		cout << i << " ";
	}	
	cout << endl;
}
int main(){
	vector<int> v1(5,10);//5個重複元素,值爲10
} 
操作 含義
assign Assign vector content (public member function )
push_back 增加元素
pop_back 刪除最後一個元素
insert 插入元素
erase 擦除元素
swap 交換元素
clear 清除元素
emplace Construct and insert element (public member function )
emplace_back Construct and insert element at the end (public member function )

鏈表
定義:

struct ListNode{
	int val;
	ListNode *next;
	ListNode(int x) : val(x), next(NULL){}
};
ListNode node(0);

或者不帶初始化的

struct ListNode
{
    int val;
    ListNode* next;
};
ListNode* node = NULL;

2. 棧

後進先出。

定義:

#include<stack>

stack<int> mystack;
操作 含義
s.empty() 如果棧爲空返回true,否則返回false
s.size() 返回棧中元素的個數
s.pop() 刪除棧頂元素但不返回其值
s.push() 在棧頂壓入新元素
s.top() 返回棧頂的元素,但不刪除該元素

3. 隊列

先進先出。
定義:

#include<queue>

queue<int> q;
操作 含義
q.empty() 如果隊列爲空返回true,否則返回false
q.size() 返回隊列中元素的個數
q.pop() 刪除隊列首元素但不返回其值
q.front() 返回隊首元素的值,但不刪除該元素
q.push() 在隊尾壓入新元素
q.back() 返回隊列尾元素的值,但不刪除該元素

3. 集合 set

#include<iostream>
#include<set>
using namespace std;
int main()
{
	set<int>s;
	s.insert(3); 
	set<int>::iterator it;            
	for(it=s.begin();it!=s.end();it++)  //使用迭代器進行遍歷 
	{
		printf("%d\n",*it);
	}
}
操作 含義
begin() 返回set容器的第一個元素的地址
end() 返回set容器的最後一個元素地址
clear() 刪除set容器中的所有的元素
empty() 判斷set容器是否爲空
max_size() 返回set容器可能包含的元素最大個數
size() 返回當前set容器中的元素個數
erase(it) 刪除迭代器指針it處元素
insert(a) 插入某個元素

4. 樹

定義樹:

struct TreeNode{
	int val;
	TreeNode* left;
	TreeNode* right;
	TreeNode(int x) : val(x), left(NULL), right(NULL){}
};

5. 圖

定義圖:
使用vector 實現。

vector<vector<pair<int, int>>> graph;

參考:

  1. C++ 棧和隊列的介紹與使用;
  2. c++ set集合的使用方法詳解
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章