Aoki Job Seeker

顺序循环队列的实现


顺序循环队列的实现



写在前面

  队列(Queue)是一种特殊的线性表,是一种只允许在表的一端进行插入操作,在表的另一端进行删除操作的线性表。表中允许进行插入操作的一端称为队尾,允许进行删除操作的一端为队头。队头和队尾分别由队头指示器和队尾指示器指示。队列的插入操作通常称为入队,队列的删除操作通常称为出队。当队列中没有元素时,为空队列。
  根据队列的定义,每次进队列的数据元素都放在原来的队尾之后成为新的队尾元素,每次出队列得到数据元素都是原来的队头元素。这样,最先入队的数据元素总是最先出队,所以队列也被称为先进先出表。
  对队列的操作主要有:初始化建立队列、入队列、出队列、取队头元素、判断队列是否为空等操作。

1.顺序队列的类定义

const int maxsize = 10;
template<class T>
class Queue
{
public:
	Queue();//构造函数
	~Queue() {};//析构函数
	void insert(const T&item);//入队
	T delet();//出队列
	T readFront() const;//读队头元素
	bool empty() const;//判断队列是否为空
	void clearQueue();//清空队列
	int getsize() const;//获取队列长度
	void display() const;//输出队列中的元素

private:
	T data[maxsize];
	int front;
	int rear;
	int count;
};

2.顺序队列类的实现

template<class T>
inline Queue<T>::Queue()
{
	front = 0;
	rear = 0;
	count = 0;
}

template<class T>
inline void Queue<T>::insert(const T & item)
{
	if (count == maxsize)
	{
		cout << "Queue is full" << endl;
		exit(1);
	}
	count++;
	data[rear] = item;
	rear = ((rear + 1) == maxsize) ? 0 : (rear + 1);
	
}

template<class T>
inline T Queue<T>::delet()
{
	if (count<=0)
	{
		cout << "Queue is empty" << endl;
	}
	count--;
	T p = data[front];
	front = ((front + 1) == maxsize) ? 0 : (front + 1);
	return p;
}

template<class T>
inline T Queue<T>::readFront() const
{
	return data[front];
}

template<class T>
inline bool Queue<T>::empty() const
{
	return (count == 0);
}

template<class T>
inline void Queue<T>::clearQueue()
{
	count = 0;
	front = rear = 0;
}

template<class T>
inline int Queue<T>::getsize() const
{
	return count;
}

template<class T>
inline void Queue<T>::display() const
{
	int i = 0;
	while (i != count)
	{
		cout << i << "号元素:" << data[i] << endl;
		i++;
	}
}

3.测试主函数

void test()
{
	Queue<int> queue;
	for (int i = 0; i < 10; i++)
	{
		queue.insert(i);
	}
	cout <<"队列的长度为:"<< queue.getsize() << endl;
	queue.display();
	cout <<"队头元素为:"<< queue.readFront() << endl;
	cout << "元素:"<<queue.delet()<<"已删除" << endl;
}


int main()
{
	test();
	system("pause");
	return EXIT_SUCCESS;
}

输出结果如下:







The End



Similar Posts

Comments