数据结构 队列
数据结构 队列
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;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步