目錄模擬佇列
模擬鍊錶
模擬堆除了用stl呼叫容器來實現基本的資料結構,
在一些特殊情況下(如:對時間、空間作限制;題目的要求比較特別的時候),
我們可以自己模擬資料結構。
以下給出幾種常用資料結構的模擬,以及它們的特殊題型模板。
// tt表示棧頂
int stk[n], tt = 0;
// 向棧頂插入乙個數
stk[ ++ tt] = x;
// 從棧頂彈出乙個數
tt -- ;
// 棧頂的值
stk[tt];
// 判斷棧是否為空
if (tt > 0)
一種題型:要求對序列之中的數,找它最近的某個符合性質的數
常見模型:找出每個數左邊/右邊離它最近的比它大/小的數
int tt = 0;
for (int i = 1; i <= n; i ++ )
// hh 表示隊頭,tt表示隊尾
int q[n], hh = 0, tt = -1;
// 向隊尾插入乙個數
q[ ++ tt] = x;
// 從隊頭彈出乙個數
hh ++ ;
// 隊頭的值
q[hh];
// 判斷佇列是否為空
if (hh <= tt)
// hh 表示隊頭,tt表示隊尾的後乙個位置
int q[n], hh = 0, tt = 0;
// 向隊尾插入乙個數
q[tt ++ ] = x;
if (tt == n) tt = 0;
// 從隊頭彈出乙個數
hh ++ ;
if (hh == n) hh = 0;
// 隊頭的值
q[hh];
// 判斷佇列是否為空
if (hh != tt)
一種題型:滑動視窗
常見模型:找出滑動視窗中的最大值/最小值
int hh = 0, tt = -1;
for (int i = 0; i < n; i ++ )
①陣列來模擬靜態鍊錶不容易超時②題目要求根據第k個插入點來進行操作(針對所有的插入操作,即使刪除),因此我們考慮用陣列來儲存,其下標就能儲存每次k的值。
int head, e[n], ne[n], idx;
//* 初始化
void init()
//* 將 x 插到頭節點
void add_to_head(int x)
//*將 x 這個點 插入到 第 k 個插入 的點後面
void add(int k, int x)
//* 將第k個插入的點 後面的乙個點刪除
void remove(int k)
int l[n],r[n],index,value[n];
void ini()
void insert(int k,int x)//在第k個節點後插入x
void remove(int k)
// h[n]儲存堆中的值, h[1]是堆頂,x的左兒子是2x, 右兒子是2x + 1
// ph[k]儲存第k個插入的點在堆中的位置
// hp[k]儲存堆中下標是k的點是第幾個插入的
int h[n], ph[n], hp[n], size;
// 交換兩個點,及其對映關係
void heap_swap(int a, int b)
void down(int u)
}void up(int u)
}// o(n)建堆
for (int i = n / 2; i; i -- ) down(i);
opencv基本資料結構
iplimage 首先介紹重要的成員變數 width和height表示了的尺寸。其次是depth和nchannels,depth是指畫素顏色的取值範圍,nchnannels為影象的通道,可以取1,2,3,4 origin變數定義了影象的原點,有兩個取值,分別是ipl origin bl和ipl or...
Python 基本資料結構
列表是python裡的內建的型別之一,可以新增和刪除其中的元素。如 role sam 33 dean 37 可以列表中包含列表,同一列表中包含不同型別的資料。下面介紹列表的一些通用操作,關於list的其他用法,可以通過help list 檢視。a 2,13,12,41,17,23 a 1 列表從0開...
基本資料結構定義
定義 棧是一種只能在一端進行插入或刪除操作的線性表。表中允許進行插入 刪除操作的一端稱為棧頂。棧頂的當前位置是動態的,棧頂的當前位置由乙個稱為棧頂指標的位置指示器指示。表的另一端稱為棧底。當棧中沒有資料元素時,稱為空棧。棧的插入操作通常稱為進棧或入棧,棧的刪除操作通常稱為退棧或出棧。特點 後進先出 ...