队列的定义
特点:先进先出
队列的基本运算定义
**初始化:**设置队列为空
**判断队列是否为空:**若为空返回ture,否则返回false
判断队列是否未满:若为满返回ture,否则返回false
**取队头元素:**取出队头元素
条件:队列不为空
**入队:**入队,就是将元素放到队列的尾部
条件:队列不满
**出队:**删除当前队头元素
顺序队列运算的实现
class Queue{
public:
Queue();
bool empty()const;
bool full()const;
errror_code get_front(elemenType &x)const;
error_code Append(const elemenType x);
error_code serve();
private:
int count;
elemenType data[maxlen];}
存储结构的改进与循环结构的引出
关于存储结构的讨论
改进方法:头尾指针的设立
假溢出问题的解决方法:采用循环队列
队列满和队列空的条件相同的解决方案
循环队列的实现
初始化运算:
Queue::Queue(){
count =0;
front=rear=0;}
判断为空
bool Queue::empty()const{
if(rear=front) return ture;
else
return false;}
判断为满
bool Queue::full() const{
if(count=maxlen-1)return ture;
else
return false;
//等价于:return(rear+1)%maxlen=front;
}
取队首元素
error_code Queue::get_front( elemenType &x)const{
if(empty())return underflow;
else{
x=data[(front+1)%maxlen];//很关键
return success;}
入队
error_code Queue::Append(const elemenType x){
if(full()) return overflow;
else
rear= (rear+1)%maxlen;//很关键
data[rear]=x;
count++;
return success;}
出队
error_code Queue::sever(){
if(empty())return underflow;
else
front=(front+1)%maxlen;
count–;
return success;}