码迷,mamicode.com
首页 > 其他好文 > 详细

栈(Stack)

时间:2016-05-07 22:16:19      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

  • 栈的定义--Stack

    栈是只允许在末端进行插入和删除的线性表。栈具有后进先出的特性(LIFO ,Last In Fast Out)。

    学过数据结构的人都知道:栈可以用两种方式来实现,一种方法是用数组实现栈,这种栈成为静态栈;另外一种方法是用链表实现栈,这种栈叫做动态栈。

  • 栈的实现

     下面是用C++实现的一个栈结构的源码(顺序表)

         

  1 #pragma once
  2 #include<iostream>
  3 #include<assert.h>
  4 using namespace std; 
  5 template<typename T>
  6 class Stack
  7 {
  8 public:
  9     Stack()
 10     :array(NULL)
 11     , size(0)
 12     , capacity(0)
 13     {}
 14     ~Stack()
 15     {
 16         if (array != NULL)
 17         {
 18             delete[] array;
 19         }
 20         capacity = 0;
 21         size = 0;
 22     }
 23     Stack(const Stack<T>& s)
 24     {
 25         array = new T[s.size];
 26         memcpy(array, s.array, sizeof(T)*s.size);
 27         size =s.size;
 28         capacity = s.capacity;
 29     }
 30     Stack<T>& operator=( const Stack<T>& s)
 31     {
 32         capacity = s.capacity;
 33         size = s.size;
 34         this->array =s.array;
 35         return *this;
 36     }
 37     void Print()
 38     {
 39         for (int index = 0; index < size; index++)
 40         {
 41             cout << array[index] << " ";
 42         }
 43         cout << endl;
 44     }
 45     void Push(const T& x)
 46     {
 47         _CheckCapacity();
 48 
 49         array[size++] = x;
 50     }
 51 
 52     void Pop()
 53     {
 54         assert(size > 0);
 55         --size;
 56     }
 57 
 58     size_t Size()
 59     {
 60         return size;
 61     }
 62 
 63     bool Empty()
 64     {
 65         return  size == 0;
 66     }
 67 
 68     const T& Top()
 69     {
 70         assert(size > 0);
 71 
 72         return array[size - 1];
 73     }
 74 protected:
 75     void _CheckCapacity()
 76     {
 77         if (size >= capacity)
 78         {
 79             T *temp = new T[capacity * 2 + 3];
 80             for (int index = 0; index < size; index++)
 81             {
 82                 temp[index] =array[index];
 83             }
 84             delete[] array;
 85             array = temp;
 86             capacity = capacity * 2 + 3;
 87         }
 88 
 89     }
 90 
 91 protected:
 92     T * array;
 93     size_t size;
 94     size_t capacity;
 95 };
 96 void fun()
 97 {
 98     Stack<int> s;
 99     s.Push(6);
100     s.Push(7);
101     s.Push(8);
102     s.Push(9);
103     s.Print();
104    cout << s.Top() << " ";
105    s.Pop();
106 }
107 void main()
108 {
109     fun();
110     system("pause");
111 }

 

 

          

栈(Stack)

标签:

原文地址:http://www.cnblogs.com/-zyj/p/Stack.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!