用c++实现队列,在这里就不说原理了,直接给出实现代码。
queue.h的代码如下
//
// queue.h
// Queue
//
// Created by Limingkai on 14/12/17.
//
#ifndef __Queue__queue__
#define __Queue__queue__
#include <stdio.h>
typedef int Item;
class Queue
{
private:
enum {Q_SIZE = 10};
struct Node{Item item;struct Node *next;};
Node * front;
Node *rear;
int itmes;
const int qsize;
Queue(const Queue &q) : qsize(0) {}
Queue & operator=(const Queue &q) {return *this;}
public:
Queue(int qs = Q_SIZE);
~Queue();
bool isempty() const;
bool isfull() const;
int queuecount() const;
bool enqueue(const Item &item);
bool dequeue(Item &itme);
};
#endif /* defined(__Queue__queue__) */
queue.m的代码如下
//
// queue.cpp
// Queue
//
// Created by Limingkai on 14/12/17.
// Copyright (c) 2014年 SINOSOFT. All rights reserved.
//
#include "queue.h"
#include <cstdlib>
Queue::Queue(int qs) : qsize(qs)
{
front = rear = nullptr;
itmes = 0;
}
Queue::~Queue()
{
Node * temp;
while (front != nullptr) {
temp = front;
front = front->next;
delete temp;
}
}
bool Queue::isempty() const
{
return itmes == 0;
}
bool Queue::isfull() const
{
return itmes == qsize;
}
int Queue::queuecount() const
{
return itmes;
}
bool Queue::enqueue(const Item &item)
{
if (isfull())
return false;
Node *add = new Node;
add->item = item;
add->next = nullptr;
itmes++;
if (front == nullptr)
front = add;
else
rear->next = add;
rear = add;
return true;
}
bool Queue::dequeue(Item & item)
{
if (front == nullptr)
return false;
item = front->item;
itmes--;
Node *temp;
temp = front;
front = front->next;
delete temp;
if (itmes == 0)
rear = nullptr;
return true;
}