基本資料結構的模擬

2022-07-11 17:24:10 字數 2082 閱讀 9498

目錄模擬佇列

模擬鍊錶

模擬堆除了用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開...

基本資料結構定義

定義 棧是一種只能在一端進行插入或刪除操作的線性表。表中允許進行插入 刪除操作的一端稱為棧頂。棧頂的當前位置是動態的,棧頂的當前位置由乙個稱為棧頂指標的位置指示器指示。表的另一端稱為棧底。當棧中沒有資料元素時,稱為空棧。棧的插入操作通常稱為進棧或入棧,棧的刪除操作通常稱為退棧或出棧。特點 後進先出 ...