佇列的特點:先進先出。即先入隊的元素將被先彈出佇列。實現佇列,同實現棧一樣,也可以用兩種基本的資料結構,一是利用連續的儲存結構(陣列),二是使用鏈式結構。
在實現資料結構之前先應該確定它的介面有哪些,對於佇列來說最重要的介面就是入隊(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...