源於生活,抽象生活。
生活中的佇列:當然是停車場排隊出場啦。
計算機的佇列:簡答的說就是先入先出(fifo)。在大腦中要有的概念是:
隊頭(狀態):就是排隊第乙個交錢準備出場的車;
隊尾(狀態):最後乙個排隊準備交錢的車;
入隊(動作):add. 把車開入「出停車場的道」。
出棧(動作):out.交完錢,把車開出停車場。
fifo 單向佇列
ok。本節只討論先入先出的單向佇列,貌似比棧還簡單哈。話不多說,擼起袖子就寫**吧。先想象架構:
物件:佇列moneyqueue(交錢佇列);元素car(小汽車)動作:入佇列add(開入繳費佇列);出佇列out(開出停車場)輔助動作:判空isempty(繳費佇列上還有沒有車),判滿(繳費佇列還能不能開進去車)當然,我還是希望能夠用模板類來實現。開始寫**吧。
moneyqueue.h
#ifndef __money_queue_h__
#define __money_queue_h__
#include #include using namespace std;
template class moneyqueue
;template moneyqueue::moneyqueue(int size)
clear();
m_isize = size;
m_pqueue = new t[size];
}template moneyqueue::~moneyqueue()
template bool moneyqueue::clear()
template bool moneyqueue::add(t t)
m_pqueue[++m_ibottom] = t;
return true;
}template bool moneyqueue::out(t &t)
t = m_pqueue[0];
for(int i = 0; i < m_ibottom; i++)
m_ibottom--;
return true;
}template bool moneyqueue::isempty()
template bool moneyqueue::isfull()
template int moneyqueue::size()
templatebool moneyqueue::show()
for (int i = 0; i <= m_ibottom; i++)
cout << endl;
return true;
}#endif // !1
car.h
#ifndef __car_h__
#define __car_h__
#include #include #include using namespace std;
class car
; car(string name, int speed);
~car(){};
private:
string m_sname;
int m_ispeed;
};#endif
car.cpp
#include "car.h"
car::car(string name, int speed)
ostream &operator << (ostream &out, car &car)
queuemain.cpp
#include #include #include "moneyqueue.h"
#include "car.h"
using namespace std;
static void myqueue();
int main()
static void myqueue()
執行結果:
佇列(二) 佇列的鍊錶實現方式
1.佇列的單向鍊錶的實現方法 return只可以返回乙個值,單向迴圈鍊錶來實現佇列的時候可以只保留乙個指標,因為保留rear指標能夠很方便的表示出front指標,所以保留rear指標。另外由於鍊錶的第乙個結點處理比較特殊,所以在初始化的時候需要單獨處理。鍊錶實現的佇列思想也是第乙個單元作為頭結點,不...
佇列(二) 佇列的鍊錶實現方式
1.佇列的單向鍊錶的實現方法 return僅僅能夠返回乙個值,單向迴圈鍊錶來實現佇列的時候能夠僅僅保留乙個指標,由於保留rear指標能夠非常方便的表示出front指標,所以保留rear指標。另外因為鍊錶的第乙個結點處理比較特殊,所以在初始化的時候須要單獨處理。鍊錶實現的佇列思想也是第乙個單元作為頭結...
二 佇列(直線佇列和環形佇列)
佇列是乙個有序列表,可以用陣列或者鍊錶來實現,遵循先入先出的原則。front指向佇列頭的資料前乙個位置,rear指向隊尾元素。利用者兩個變數front及rear分別記錄佇列前後端的下標,front會隨著資料輸出而改變,而rear則是隨著資料輸入而改變。下面利用陣列建立乙個含有三個元素的佇列,及注釋如...