数据结构 队列

数据结构 队列

 

1.概念

从队尾入队

从队首出队

FIFO First in first out

2.课堂练习 用两个队列实现栈

 

 

 

图(1):当栈里面插入元素“abcd”的时候,元素a在栈底(最后出去),d在栈顶(最先出去);

图(2):将元素“abc”从q1中头删,然后再q2中尾插进来之后,头删q1中的元素“d”,就相当于实现了栈顶元素的出栈;

图(3):同理,将元素“ab”从q2中头删,然后尾插到q1中,然后再头删q2中的元素“c”;

图(4):同理,删除元素“b”;

————————————————

原文链接:https://blog.csdn.net/cherrydreamsover/article/details/80466781

 

Queue.h

Queue.cpp

 main.cpp

 

 

 

 CirQueue.h

#ifndef CIRQUEUE_CIRQUEUE_H
#define CIRQUEUE_CIRQUEUE_H
enum Error_code{success,underflow,overflow};
const int maxqueue=10;
template<class Queue_entry>
class CirQueue {
public:
CirQueue();
bool empty()const;
Error_code serve();
Error_code append(const Queue_entry &item);
Error_code retrieve(Queue_entry &item)const;
bool full()const;
int size() const;
void clear();
Error_code serve_and_retrieve( Queue_entry &item);

private: int count;
int front,rear;
Queue_entry entry[maxqueue];
};


#endif //CIRQUEUE_CIRQUEUE_H

CirQueue.cpp

#include "CirQueue.h"
template<class Queue_entry>
CirQueue<Queue_entry>::CirQueue() {
front=0;
rear=maxqueue-1;
count=0;
}
template<class Queue_entry>
bool CirQueue<Queue_entry>::empty()const{
return count==0;
}
template<class Queue_entry>
Error_code CirQueue<Queue_entry>::serve()
{if(count<=0) return underflow;
count--;
front=((front+1)==maxqueue)?0:front+1;
return success;}
template<class Queue_entry>
Error_code CirQueue<Queue_entry>::append(const Queue_entry &item)
{if(count>=maxqueue) return overflow;
count++;
rear=((rear+1)==maxqueue)?0:rear+1;
entry[rear]=item;
return success;
}
template<class Queue_entry>
Error_code CirQueue<Queue_entry>::retrieve(Queue_entry &item) const
{
if(count<=0) return underflow;
item=entry[front];
return success;
}
template<class Queue_entry>
int CirQueue<Queue_entry>::size() const {
return count;
}
template<class Queue_entry>
bool CirQueue<Queue_entry>::full() const
{
return(count==maxqueue);
}
template<class Queue_entry>
void CirQueue<Queue_entry>::clear()
{
front=0;
rear=maxqueue-1;
count=0;
}
template<class Queue_entry>
Error_code CirQueue<Queue_entry>::serve_and_retrieve(Queue_entry &item)
{ if(count<=0) return underflow;
item=entry[front];
count--;
front=((front+1)==maxqueue)?0:front+1;
return success;
}

main.cpp

#include <iostream>
#include "CirQueue.cpp"
#include "CirQueue.h"
using namespace std;

int main() {
int n;
double item;
CirQueue<double>numbers;
cout<<"Type in an integer n followed by n decimal integers."<<endl;
cout<<"The numbers will be printed in original order."<<endl;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>item;
numbers.append(item);
}
cout<<endl<<endl;
while(!numbers.empty())
{
numbers.serve_and_retrieve(item);
cout<<item<<" ";
}
cout<<endl;
}
posted @   柠檬味呀  阅读(172)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示