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

原创 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;
};

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

数据结构实验报告 栈和队列

一、实验目的1.掌握栈、队列的思想及其存储实现。 2.掌握栈、队列的常见算法的程序实现。二、实验仪器及环境:PC计算机 windows 7操作系统 CodeBlocks10.05三、实验内容...
  • wuxuanyi27
  • wuxuanyi27
  • 2016年04月26日 20:30
  • 1584

数据结构的Java实现——栈和队列

栈(Stack)作为一个先进后出(FILO) 的线性结构,只支持在栈顶的插入和弹出。队列(Queue)作为一个先进先出(FIFO) 的线性结构,支持在队首获取元素,在对尾插入元素。 栈的实现: p...
  • baoyiming1991
  • baoyiming1991
  • 2011年03月21日 22:35
  • 6015

数据结构与算法(C++版):表、栈和队列

前言本系列博客为学习数据结构与算法过程中的原创笔记,其中代码实现基于C++语言。STL中的向量和表在C++语言的库中包含有公共数据结构的实现,这就是众所周知的标准模版库(Standard Templa...
  • u013271326
  • u013271326
  • 2017年06月06日 11:37
  • 243

《数据结构》实验三:栈和队列实验 (实验报告)

一.实验目的      巩固栈和队列数据结构,学会运用栈和队列。 1.回顾栈和队列的逻辑结构和受限操作特点,栈和队列的物理存储结构和常见操作。 2.学习运用栈和队列的知识来解决实际问...
  • denise94
  • denise94
  • 2014年11月05日 12:08
  • 4944

数据结构-栈和队列小结

1栈   1>栈的定义:       栈是限定仅在表尾进行插入和删除操作的线性表。       我们把插入和删除的一端称为栈顶(TOP),另一端称为栈底(BOTTOM),不包含任何元素的栈称为空...
  • XiangTianZaiJie500
  • XiangTianZaiJie500
  • 2016年10月24日 17:22
  • 1343

php栈和队列

php 里面没有栈和队列 的数据结构,但是可以通过数组来模拟:1 栈 先进后出表,后进先出表$arr = array(); array_push($arr, 'aaa');//aaa 压入栈 arra...
  • gongstrong123
  • gongstrong123
  • 2016年03月24日 11:51
  • 896

数据结构实践——停车场模拟(栈和队列综合)

本文是针对数据结构基础系列网络课程(3):栈和队列的实践项目。  设停车场是一个可停放n辆汽车的狭长死胡同,南边封口,汽车只能从北边进出(这样的停车场世间少有)。汽车在停车场内按车辆到达时间的先后顺序...
  • sxhelijian
  • sxhelijian
  • 2015年10月05日 22:04
  • 7415

《数据结构》实验三:栈和队列实验报告

一..实验目的      巩固栈和队列数据结构,学会运用栈和队列。 1.回顾栈和队列的逻辑结构和受限操作特点,栈和队列的物理存储结构和常见操作。 2.学习运用栈和队列的知识来解决实际问题。 3...
  • hslynn
  • hslynn
  • 2014年11月09日 21:50
  • 3263

数据结构 用栈和队列判断回文数

12321,你是不是你,这样的东西叫回文,由于队列和栈的存储方式不同,栈是LIFO,last in first out ,盘子一个一个堆,堆完后从上面开始拿;队列是FIFO,first  in fir...
  • iaiti
  • iaiti
  • 2013年08月17日 13:18
  • 7961

利用堆栈和队列实现计算器

我们为了简化代码量所以使用stack和queue两个stl库中所提供的函数,所有的函数实现全部和前面所提供的一致 map是一个函数映射库,普通的数组可以看成是int型到int,char等其他类型的映...
  • yyb0802
  • yyb0802
  • 2017年10月30日 16:53
  • 115
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构:模板实现栈和队列
举报原因:
原因补充:

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