手写循环队列
实现<queue>(伪)
#pragma once
#include<stdio.h>
#include<cassert>
template<class T, int size = 50>
class Queue
{
public:
Queue(): front(0), rear(0), count(0) {}
void Insert(const T &item) //插入数据
{
assert(count!=size);
count++;
list[rear] = item;
rear = (rear+1)%size;
}
T Pop() //返回队首并弹出
{
int temp = front;
assert(count>0);
count--;
front = (front+1)%size;
return list[temp];
}
void clear() { front = rear = count = 0; }
const T Front() const { return list[front]; }
int Getsize() const { return count; }
bool Empty() const { return count==0; } //检验是否为空,↓是否满
bool Full() const { return count==size; }
private:
int front, rear, count; //队头指针、队尾指针、元素个数
T list[size]; //队列元素数组
};
int main(void)
{
char i;
Queue<char> p;
for(i='a';i<='z';i++)
p.Insert(i);
while(p.Front()!='h')
printf("%c", p.Pop());
while(p.Empty()==0)
printf("%c", p.Pop());
puts("");
return 0;
}