常用数据结构C++实现(2):栈和队列

栈和队列都可以看做插入和删除受限制的线性表,通过继承线性表可以实现栈和队列。

scrn20160111191835

Github:  https://github.com/yalewoo/cpp-data-structure

栈(Stack)

从Vector派生而来,新增的接口有入栈、出栈和返回栈顶元素。直接通过线性表的接口来实现。

C++实现

stack.h

#ifndef MY_STACK_H
#define MY_STACK_H


#include "Vector.h"
template <typename T>
class Stack : public Vector<T>
{
public:

	using Vector<T>::size;

	void push(T const & e) { this->insert(size(), e); }
	T pop() { return this->remove(size()-1); }
	T top() {return this->get(size()-1); }

};

#endif

stack.cpp

#include <iostream>
#include "Stack.h"

using namespace std;

template <typename T>
class MyPrint
{
public:
	void operator()(T e)
	{
		cout << e << " ";
	}
};

int main()
{
	Stack<int> s;
	s.push(4);
	s.push(5);
	s.push(7);
	s.push(8);
	s.push(9);
	s.push(11);

	MyPrint<int> visit;

	s.travser(visit);

	s.empty();

	return 0;
}

队列(Queue)

从List派生而来,目前没有检查有效性,因此队列为空时队首和队尾元素未知,队列为空时出队操作会带来错误。

新增接口有入队、出队和返回队首或队尾元素。

C++实现

queue.h

#ifndef MY_QUEUE_H
#define MY_QUEUE_H

#include "List.h"

template <typename T>
class Queue : public List<T>
{
public:
	void enqueue(T const & e) { this->insertAsLast(e); }
	T rear() { return this->last()->data; }

	T dequeue() { return this->remove(this->first()); }
	T front() { return this->first->data; }
};

#endif

queue.cpp

#include "Queue.h"

#include <iostream>

using namespace std;



template <typename T>
class MyPrint
{
public:
	void operator()(T e)
	{
		cout << e << " ";
	}
};

int main()
{
	Queue<int> q;
	q.enqueue(4);
	q.enqueue(5);
	q.enqueue(6);
	q.enqueue(7);
	q.enqueue(8);
	q.enqueue(9);

	MyPrint<int> visit;

	q.travser(visit);

	cout << endl << q.dequeue() << endl;


	q.travser(visit);


	return 0;
}

 

如果文章对你有帮助,欢迎点赞或打赏(金额不限)。你的打赏将全部用于支付网站服务器费用和提高网站文章质量,谢谢支持。

版权声明:

本文由 原创,商业转载请联系作者获得授权。
非商业转载请注明作者 雅乐网 ,并附带本文链接:
https://www.yalewoo.com/data_structure_cpp_2_stack_and_queue.html

上一篇:

下一篇:

我要评论

验证码*: 6 + 6 =