C++实现栈

来源:互联网 发布:虚拟社交网络的优点 编辑:程序博客网 时间:2024/06/05 09:32

之前在学习lua,看到网上一些博主用lua,实现一些基本的数据结构。突发其想,打算用C++好好重写下数据结构,夯实下自己的语言基础。

------------------------------------------------------------------stack.h

#pragma once
#include<assert.h>
#include<iostream>
#include<string>
using namespace std;
template <typename DataType>
class Stack
{
private:
enum
{
MAX=100
};
DataType items[MAX];
int top;
public:
Stack();
bool isempty() const;
bool isfull() const;
bool push(const DataType& item);
DataType pop();
void clear();
int getTop();
void reserve(DataType item,int size=0);
void showStack();
};


template <typename DataType>
Stack<DataType>::Stack():top(0)
{
memset(items,0,sizeof(items)/sizeof(items[0]));
}
template <typename DataType>
bool Stack<DataType>::isempty()const
{
if(top <= 0)
{
return true;
}
else
{
return false;
}
}
template <typename DataType>
bool Stack<DataType>::isfull()const
{
if (top >= MAX)
{
return true;
}
else
{
return false;
}
}
template <typename DataType>
bool Stack<DataType>::push(const DataType& item)
{
if (top < MAX)
{
items[top]=item;
top++;
return true;
}else
{
return false;
}
}
template <typename DataType>
DataType Stack<DataType>::pop()
{
DataType item;
if (top > 0)
{
top--;
item=items[top];
return item;
}else
{
return 0;
}
}
template <typename DataType>
void Stack<DataType>::clear()
{
memset(items,0,sizeof(items)/sizeof(items[0]));
top = 0;
}
template <typename DataType>
int Stack<DataType>::getTop()
{
return top;
}
template <typename DataType>
void Stack<DataType>::reserve(DataType item,int size=0)
{
assert(size <= MAX);
top=size;
for (int i = 0; i <= top; i++)
{
items[i]=item;
}
}
template <typename DataType>
void Stack<DataType>::showStack()
{
for (int i = 0; i <= top; i++)
{
cout << items[i]<<endl; 
}
}
-------------------------------------------------stack.cpp

简单验证自己写的栈,具不具备基本的特点

#include"stack.h"
#include<iostream>
#include<string>
using namespace std;


int main()
{
Stack<string> _stringStack;
Stack<int> _intStack;
cout << "_stringStack top is " << _stringStack.getTop() << endl ;
cout << "_intStack top is " << _intStack.getTop() << endl ;
for (int i = 0; i < 10; i++)
{
_intStack.push(i);
char _temp[100];
sprintf(_temp,"string_%d",i);
_stringStack.push(_temp);
}
while (_stringStack.isempty() ==false)
{
cout << "_stringStack["<<_stringStack.getTop()<<"]=" <<_stringStack.pop() << endl ;
}
while (_intStack.isempty()==false)
{
cout << "_intStack["<<_intStack.getTop()<<"]=" <<_intStack.pop() << endl ;
}
_stringStack.clear();//清除栈
_intStack.clear();
_stringStack.showStack();
_intStack.showStack();
_intStack.reserve(10,10);//重新设置栈的大小,第一个参数表示值,第二个参数表示栈的大小
_stringStack.reserve("mystring",10);
_stringStack.showStack();
_intStack.showStack();
cout << _stringStack.pop() << endl ;
int i;
cin>>i;
return 0;
}

0 0