标签:
栈是只允许在末端进行插入和删除的线性表。栈具有后进先出的特性(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 }
标签:
原文地址:http://www.cnblogs.com/-zyj/p/Stack.html