#include <iostream>
using namespace std;
class queue{
public:
queue(unsigned int n):m_start(new int[n+1]),m_head(0),m_tail(0),m_capacity(n+1){}
~queue(){delete[] m_start;}
void push(int e);
void pop();
int front();
int back();
bool isEmpty();
bool isFull();
int size();
private:
int* m_start;
int m_head;
int m_tail;
int m_capacity;
};
void queue::push(int e){
if((m_tail+1) % m_capacity != m_head){
m_start[m_tail] = e;
m_tail = (m_tail+1) % m_capacity;
}else{
cout << "queue is full.\n";
}
}
void queue::pop(){
if(m_tail == m_head){
cout << "queue is empty.\n";
}else{
m_head = (m_head+1)%m_capacity;
}
}
int queue::front(){
if(m_tail == m_head){
cout << "queue is empty.\n";
exit(1);
}else{
return m_start[m_head];
}
}
int queue::back(){
if(m_tail == m_head){
cout << "queue is empty.\n";
exit(1);
}else{
return m_start[(m_tail-1+m_capacity)%m_capacity];
}
}
bool queue::isEmpty(){
return m_tail == m_head;
}
bool queue::isFull(){
return m_head == (m_tail+1)%m_capacity;
}
int queue::size(){
if(m_head <= m_tail){
return m_tail - m_head;
}else{
return m_tail - m_head + m_capacity;
}
}
int main(){
queue q(10);
for(int i = 0 ; i < 10 ; ++i){
q.push(i);
}
cout << "queue is full: " << q.isFull() << endl;
cout << "queue first is: " << q.front() << endl;
cout << "queue last is: " << q.back() << endl;
for(int i = 0 ; i < 10 ; ++i){
cout << "queue first is: " << q.front() << ends << "queue size is: " << q.size() << endl;
q.pop();
}
cout << "queue is empty: " << q.isEmpty() << endl;
return 0;
}
queue顺序C++
最新推荐文章于 2024-09-05 21:12:03 发布