演算法(小橙書)筆記 常用的資料結構(二)

2021-10-07 13:26:30 字數 1704 閱讀 2278

佇列的特點:先進先出。即先入隊的元素將被先彈出佇列。實現佇列,同實現棧一樣,也可以用兩種基本的資料結構,一是利用連續的儲存結構(陣列),二是使用鏈式結構。

在實現資料結構之前先應該確定它的介面有哪些,對於佇列來說最重要的介面就是入隊(enqueue)和出棧(dequeue),其他的輔助介面如佇列的大小等。對於乙個實用的容器,最好不需要使用者來管理容器的大小,這對於鏈式結構來說是相當容易的,當用陣列實現時,就需要乙個resize的方法來自動調整容器的大小。

為了使陣列的大小不是固定的,實現時使用乙個指標來表示容器,並用nlength變數來代表當前容量,方便在合適時自動改變陣列的大小,改變的策略這裡就選擇的簡單的倍增(減)的方法。resize時要小心記憶體洩漏的問題。因為是在隊首刪除,隊尾插入,所以需要兩個下標來分別表示隊首和隊尾,以方便操作,用鏈式結構實現同理。

template

<

typename t>

class

carrayqueue

~carrayqueue()

bool

isempty()

intqueuesize()

void

enqueue

(t element)

myarray[nsize]

= element;

nsize++;}

t dequeue()

t dequeue = myarray[nfirst]

; nfirst++

; nsize--

;return dequeue;

}private

:int nsize;

int nfirst;

int nlength;

t* myarray;

void

resizearray

(int nnewlength);}

;template

<

typename t>

inline

void carrayqueue

::resizearray

(int nnewlength)

delete

myarray;

myarray =

new t[nnewlength +1]

;for

(int i =

0; i < nsize; i++

)delete

newarray;

nlength = nnewlength;

nfirst =0;

//重新定位到新的隊首

}

鏈式結構的好處就是不需要管理整個佇列的大小,當然記憶體空間也不需要是連續的。

template

<

typename t>

class

clinkqueue

~clinkqueue()

}bool

isempty()

intqueuesize()

void

enqueue

(t element)

else

} t dequeue()

private

:int nsize;

node

* queuehead;

node

* queuetail;

};

演算法筆記(二)資料結構

資料結構實計算機中對資料的一種儲存和組織的方式,同時也泛指相互之間存在一種或多種特定關係的資料的集合。到現在為止,計算機技術領域中還沒有乙個統一的資料結構的定義。以下是引用的部分解釋 data structure d,r 其中d是資料元素的集合,r是該集合中所有元素之間的關係的有限集合。2 sart...

資料結構常用演算法

將一整數序列中的所有負數轉移到所有正數之前 using system using system.collections.generic using system.linq using system.text namespace csharptest low while low high a low ...

資料結構常用演算法

void union list la,list lb union void mergelist list la,list lb,list lc else mergelist status initlist sq sqlist l initlist sq status listinsert sq sq...