整数:
#ifndef STACK_H
#define STACK_H
class StackOfIntegers{
public:
StackOfIntegers();
bool empty();
int peek();
void push(int value);
int pop();
int getSize();
private:
int elements[100];
int size;
};
StackOfIntegers::StackOfIntegers(){
size = 0;
}
bool StackOfIntegers::empty(){
return (size == 0);
}
int StackOfIntegers::peek(){
return elements[size - 1];
}
void StackOfIntegers::push(int value){
elements[size++] = value;
}
int StackOfIntegers::pop(){
return elements[--size];
}
int StackOfIntegers::getSize(){
return size;
}
#endif // STACK_H_INCLUDED
#ifndef STACK_H
#define STACK_H
template <typename T>
class Stack{
public:
Stack();
bool empty();
T peek();
void push(T value);
T pop();
int getSize();
private:
T elements[100];
int size;
};
template <typename T>
Stack<T>::Stack(){
size = 0;
}
template <typename T>
bool Stack<T>::empty(){
return (size == 0);
}
template <typename T>
T Stack<T>::peek(){
return elements[size - 1];
}
template <typename T>
void Stack<T>::push(T value){
elements[size++] = value;
}
template <typename T>
T Stack<T>::pop(){
return elements[--size];
}
template <typename T>
int Stack<T>::getSize(){
return size;
}
#endif // STACK_H
stack例子
#include <iostream>
#include <string>
#include "GenericStack.h"
using namespace std;
template<typename T>
void printStack(Stack<T> &stack){ //定义了一个打印Stack的函数
while(!stack.empty())
cout << stack.pop() <<" ";
cout << endl;
}
int main(){
//Create a stack of int values
Stack<int> intStack;
for(int i = 0; i < 10; i++)
intStack.push(i);
printStack(intStack);
//Create a stack of strings
Stack<string> stringStack;
stringStack.push("Chicago");
stringStack.push("Los Angeles");
stringStack.push("London");
printStack(stringStack);
return 0;
}
改进的stack类
#ifndef IMPROVEDSTACK_H_INCLUDED
#define IMPROVEDSTACK_H_INCLUDED
/*
*Stack<T>类的size属性表示栈中元素的数目,capacity保存元素数组的当前容纳能力
*Stack<T>类的无参构造函数创建一个容量为16的数组
*当容量满后,我们可以创建一个新的、更大的数组,将旧数组中的内容复制到新数组,并且删除掉旧数组
*/
template <typename T>
class Stack{
public:
Stack();
bool empty();
T peek();
void push(T value);
T pop();
int getSize();
private:
T elements[100];
int size;
int capacity;
void ensureCapacity();
};
template <typename T>
Stack<T>::Stack():size(0),capacity(16){
elements = new T[capacity];
}
template <typename T>
bool Stack<T>::empty(){
return (size == 0);
}
template <typename T>
T Stack<T>::peek(){
return elements[size - 1];
}
template <typename T>
void Stack<T>::push(T value){
ensureCapacity();
elements[size++] = value;
}
template <typename T>
void Stack<T>::ensureCapacity(){
if(size >= capacity){
T *old =elements;
capacity = 2 * size;
elements = new T[size * 2];
for(int i = 0; i < size; i++)
elements[i] = old[i];
delete old; //释放内存
}
}
template <typename T>
T Stack<T>::pop(){
return elements[--size];
}
template <typename T>
int Stack<T>::getSize(){
return size;
}
#endif // IMPROVEDSTACK_H_INCLUDED