数据结构:模板实现栈和队列

原创 2016年06月01日 00:05:21

(一)模板实现栈

#pragma once
typedef unsigned int size_t;
template <class T>
class Stack
{
public:
 Stack()
  :_array(NULL)
  ,_top(-1)
  ,_capacity(0)
 {}
 ~Stack()
 {
  if(_array)
  {
   delete[] _array;
  }
 }
public:
 void Push(const T& num)
 {
  _CheckCapacity();
  _array[++_top] = num;
 }
 void Pop()
 {
  if(Empty())
  {
   printf("Empty!");
  }
  else
  {
   _top--;
  }
 }
 T& GetTop()
 {
  return _array[_top];
 }
 void PrintStack()
 {
  cout<<array[_top];
 }
 size_t Size()
 {
  return _top + 1;
 }
 bool Empty()
 {
  return _top == -1;
 }
private:
 void _CheckCapacity()
 {
  if(_array == NULL)
  {
   _capacity = 3;
   _array = new T[_capacity];
   return;
  }
  if(_capacity = _top + 1)
  {
   _capacity *= 2;
   T* tmp = new T[_capacity];
   for(size_t i = 0; i <=(int)_top; i++)
   {
    tmp[i] = _array[i];
   }
   _array = tmp;
  }
 }
private:
 T* _array;
 int _top;                 //下标
 size_t _capacity;
};

2.模板实现队列

#pragma once
template <class T>
struct Node
{
 T _data;
 Node<T>* _next;
 Node(const T& d)
  :_data(d)
  ,_next(NULL);
 {}
};
template <class T>
class Queue
{
public:
 Queue()
  :_head(NULL)
  ,_tail(NULL)
  ,_size(0)
 {}
 ~Queue
 {
  if(_head)
   delete _head;
  if(_tail)
   delete _tail;
 }
public:
 void Push(const T& d)
 {
  if(_head == NULL)
  {
   _head = _tail = new Node<T>(d);
  }
  else
  {
   _tail->_next = new Node<T>(d);
   _tail = _tail->_next;
  }
  _size++;
 }
 void Pop()
 {
  if(_head == NULL)
  {
   cout<<"Empty!"<<endl;
   return;
  }
  else if(_head == _tail)
  {
   delete _head;
   _head = _tail = NULL;
  }
  else
  {
   Node<T>* tmp = _head;
   _head = _head->_next;
   delete tmp;
  }
  _size--;
 }
 bool Empty()
 {
  return _head == NULL;
 }
 size_t Size()
 {
  return _size;
 }
 T& Front()
 {
  assert(_head);
  return _head->_data;
 }
 T& Back()
 {
  assert(_tail);
  return _tail->_data;
 }
private:
 Node<T>* _head;
 Node<T>* _tail;
 size_t _size;
};

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

栈与队列-顺序栈与链栈类模板的实现(数据结构基础 第3周)

这是用C++编写的栈的类模板的实现,包括顺序栈和链栈,并进行了简单的测试。 代码中srrStack类和lnkStack类均继承于Stack类, Stack类可以看成是栈的逻辑结构(ADT抽象数据类型...

数据结构队列和栈的模板实验

  • 2013年11月16日 10:11
  • 1.06MB
  • 下载

数据结构学习:环形队列的模板类实现

参考:http://www.imooc.com/learn/519 队列机制:先进先出 FIFO(first in first out) 队列结构:普通队列&环形队列 环形队列的好处:解决了...

数据结构(6) 顺序队列 c++ 模板实现

顺序队列   1、顺序队列  (1)顺序队列的定义    队列的顺序存储结构称为顺序队列,顺序队列实际上是运算受限的顺序表。 (2) 顺序队列的表示   ①和顺序表一样,顺序队列用一...

<C/C++数据结构>队列(C++模板实现)

一,队列的基本概念 队列特性:先进先出(FIFO)——先进队列的元素先出队列。来源于我们生活中的队列(先排队的先办完事)。...

数据结构(7) 链队列 c++ 模板实现

链队列 1、 链队列的定义    队列的链式存储结构简称为链队列。它是限制仅在表头删除和表尾插入的单链表。 2、 链队列的结构类型说明 //QueueNode.h ...

数据结构(C++)最小优先权队列实现<模板类>

1.优先级队列: 每一次都能取出队列中的具有最高优先权的元素,这种队列就是优先级队列。 2.代码实现 模板类PQueue: #ifndef PQUEUE_H #define PQUEU...
  • Gpwner
  • Gpwner
  • 2017年02月10日 11:04
  • 185

数据结构之循环队列(顺序表存储)——C++模板类实现

基于数组存储形式的循环队列实现  循环队列的基于数组的存储表示亦称为顺序队列,用一个一维数组elem[maxSize]来实现,其中为了区别队列空与满,该数组中最多存储maxSize-1个元素,如此一来...
  • Mrx_Nh
  • Mrx_Nh
  • 2017年03月11日 14:00
  • 237

数据结构-用双端队列实现栈

  • 2010年12月25日 12:21
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构:模板实现栈和队列
举报原因:
原因补充:

(最多只允许输入30个字)