単純なキューテンプレート
12861 ワード
このコードの書く時間は比較的に短くて、つまり30分で、テストのも多くありませんが、一定の参考価値があります.
1 #include <iostream>
2
3 using namespace std;
4 template<class T>
5 class Queue
6 {
7 private:
8 T *queuehead;
9 int maxsize;
10 int front;
11 int rear;
12 public:
13 Queue(int max=10);
14 ~Queue();
15 bool Isempty();
16 bool Isfull();
17 bool addin(T & add);
18 bool pop(T & out);
19 void show();
20 };
21 template<class T>
22 Queue<T>::Queue(int max)
23 {
24 if(max>0)
25 maxsize=max;
26 else
27 maxsize=10;
28 queuehead=new T [max];
29 if(queuehead==NULL)
30 abort();
31 front=0;
32 rear=0;
33 }
34 template<class T>
35 Queue<T>::~Queue()
36 {
37 delete [] queuehead;
38 }
39 template<class T>
40 bool Queue<T>::Isempty()
41 {
42 if(front==rear)
43 return true;
44 else
45 return false;
46 }
47 template<class T>
48 bool Queue<T>::Isfull()
49 {
50 if((rear+1)%maxsize==front)
51 return true;
52 else
53 return false;
54 }
55 template<class T>
56 bool Queue<T>::addin(T & add)
57 {
58 if(!Isfull())
59 {
60 queuehead[rear%=maxsize]=add;
61 rear++;
62 return true;
63 }
64 else
65 return false;
66 }
67 template<class T>
68 bool Queue<T>::pop(T & out)
69 {
70 if(!Isempty())
71 {
72 out=queuehead[front%=maxsize];
73 front++;
74 return true;
75 }
76 else
77 return false;
78 }
79 template<class T>
80 void Queue<T>::show()
81 {
82 cout<<"Data in line:
";
83 for(int i=0;i<maxsize;i++)
84 cout<<queuehead[i]<<ends;
85 cout<<endl;
86 cout<<"rear:"<<rear<<endl;
87 cout<<"front:"<<front<<endl;
88 }
89 int main()
90 {
91 cout << "Hello world!" << endl;
92 int a;
93 Queue<int> temp1;
94 cin>>a;
95 while(!cin.fail())
96 {
97 temp1.addin(a);
98 cin>>a;
99 }
100 while(!temp1.Isempty())
101 {
102 temp1.pop(a);
103 cout<<a<<ends;
104 }
105 cout<<endl;
106 temp1.show();
107 return 0;
108 }