C 的棧 佇列 堆

2021-10-08 13:35:41 字數 2498 閱讀 7005

1、棧定義

標頭檔案#include

先進後出

#include

stack<

int> s;

2、c++ 中stack的定義struct中有size和top,之所以用size,而不用top+1表示size,是因為stack為空時,top為0,此時初始化,返回0個stack。

2、佇列

#include

// 佇列

先進先出

棧和佇列均為stl中定義。

講解:3、堆

#include

priority_queue<

int, vector<

int>

, greater<

int>>

//小頂堆隊頭小,越來越大。

priority_queue<

int, vector<

int>

, less<

int>>

//大頂堆隊頭大,越來越小;

4、陣列排序

#include

int a[3]

=;sort

(a,a+3)

;//預設公升序2,3,6

將序bool

compare

(int a,

int b)

int a[10]

=;sort

(a,a+

10,compare)

;//在這裡就不需要對compare函式傳入引數了,sort也可以用於vector排序,方法相同

for(

int i=

0;i<

10;i++

)cout<

<

sort

(arr1.

begin()

+tmp,arr1.

end())

;//在一定範圍內排序

sort()對陣列和vector排序後,會改變陣列和vector的順序。

5、cin讀入陣列

使用vector

int n =0;

cin >> n;

vector<

int>

p(n)

;for

(int i =

0; i < n; i++

)for

(int i =

0;i < p.

size()

;i++

) cout << endl;

vector<

int>nums;

int num =0;

dowhile

(getchar()

!='\n');

for(

int i =

0;i < nums.

size()

;i++

) cout << endl;

用陣列

#include

// #include

using

namespace std;

intmain

(int argc,

char

* ar**)

;int n=0;

cin>>n;

//讀入帶輸入數字個數

int*a =

newint

[n];

//不知道陣列大小,所以採用動態陣列

如果用靜態陣列,宣告靜態陣列需要宣告陣列大小.一般不用動態陣列,因為動態陣列申請記憶體時,不知道要申請多少。

int

*a =

newint()

;//定義動態陣列

int n=9;

//用變數定義陣列

int a[n]

;

6、集合插入、讀取

set<

int> s;

//定義集合

s.insert

(nums1[i]);

//傳入值

set<

int>

::iterator it;

//迭代取值

for(it=s.

begin()

;it!=s.

end(

);it++

)

集合中的值如果有重複,會自動去重。

棧,佇列,堆的區別

堆,棧,佇列的區別 從記憶體分配上來說 棧是作業系統在建立某個程序或者執行緒時建立的乙個儲存區域,是執行緒私有的,棧中存的是區域性變數之類,函式引數。由作業系統自動分配。堆是程式執行時,向作業系統申請某大小的記憶體空間,所有new 出來的物件和陣列都是儲存在堆中的。從資料結構來說 堆是完全二叉樹 棧...

堆與棧 佇列

首先,我們舉乙個例子 void f 這條短短的一句話就包含了堆與棧,看到new,我們首先就應該想到,我們分配了一塊堆記憶體,那麼指標p呢?他分配的是一塊棧記憶體,所以這句話的意思就是 在棧記憶體中存放了乙個指向一塊堆記憶體的指標p。在程式會先確定在堆中分配記憶體的大小,然後呼叫operator ne...

己 棧,堆,佇列

5.陣列中元素與下乙個比它大的元素之間的距離 6.迴圈陣列中比當前元素大的下乙個元素 部分借鑑 224.基本計算器 方法1 將中綴表示式轉換成字尾表示式,然後使用上面的方法 方法2 直接使用兩個棧進行求解,乙個放數字乙個放表示式 方法3.使用乙個棧求解 很巧妙,使用乙個棧,對於操作符,左右括號和數字...