/*
1、在队列中,允许插入的一端叫队尾(rear),允许删除的一端称为队头(front)。
2、队头指针始终指向队列头元素(先出队,后++)
队尾指针始终指向队列尾元素的下一个位置(先++,后进队)
3、少用一个元素的空间
front = rear,循环队列空
(rear+1) % MAXQSIZE = front,循环队列满(rear始终指向空)
4、
*/
typedef int ElementType;
class queueRecord{
private:
int capacity;
int front;
int rear;//队尾
int size;//实际队长(也可用来判断空或满)
ElementType *pArray;
public:
queueRecord(int c=100,int f=0,int r=0,int s=0,ElementType*p=NULL):
capacity(c),front(f),rear(r),size(s),pArray(p){
createQueue();
};//调用createQueue申请数组空间
~queueRecord(){};
void createQueue();
bool isEmpty();
bool isFull();
void makeEmpty();
void disposeQueue();
void enQueue(ElementType e);
ElementType getFront();
void deQueue();
};
void queueRecord::createQueue(){
pArray = new ElementType[capacity];
}
bool queueRecord::isEmpty(){
return front==rear;//return size==0;
}
bool queueRecord::isFull(){
return (rear+1)%capacity==front;
}
void queueRecord::makeEmpty(){
front=0;
rear=0;
size=0;
}
void queueRecord::disposeQueue(){
if(!pArray) delete pArray;
}
void queueRecord::enQueue(ElementType e){
if(isFull())
cout<<"full queue!";
else{
pArray[rear]=e;
rear=(rear+1)%capacity;
size++;
}
}
ElementType queueRecord::getFront(){
return pArray[front];
}
void queueRecord::deQueue(){
front=(front+1)%capacity;
}
#include<cstdlib>
#include<iostream>
using namespace std;
typedef int ElementType;
class Node{
friend class queueRecord;
private:
ElementType data;
Node* _next;
public:
Node(ElementType e=0, Node*p=NULL):data(e),_next(p){}
~Node();
};
class queueRecord{
private:
Node* front;
Node* rear;//队尾
int size;//实际队长(也可用来判断空或满)
public:
queueRecord();
~queueRecord(){};
bool isEmpty();
void makeEmpty();
ElementType getFront();
void enQueue(ElementType e);
void deQueue();
};
queueRecord::queueRecord(){
front = new Node(0,NULL);//front指向头结点且始终不变
rear = front;
size = 0;
}
bool queueRecord::isEmpty(){
return size==0;//front==rear
}
void queueRecord::makeEmpty(){
while(!isEmpty())
deQueue();
}
ElementType queueRecord::getFront(){
if(isEmpty()){
cout<<"Empty queue!";
return 0;
}
else
return front->_next->data;
}
void queueRecord::enQueue(ElementType e){
Node* newNode = new Node(e,NULL);
rear->_next = newNode;
rear = rear->_next;
size++;
}
void queueRecord::deQueue(){
Node* dele = front->_next;
front->_next = dele->_next;
free(dele);
size--;
}
int main(){}