//main.cpp
//Creat at 2013-11-23
//程序入口,控制栈的实现
//Created by Kaka
//Latest update:2013-11-23
//栈指针修改为有符号数
#include <iostream>
#include "ClassDef.h"
int main()
{
Stack<int>intStack(80);
int choice = NULL;
do //实现栈的循环处理
{
choice=Menushow();
switch(choice)
{
case 1: //入栈操作
{
std::cout<<"输入要入栈的数据:";
int num;
std::cin>>num;
intStack.push(num);
intStack.show();
break;
}
case 2: //出栈操作
{
intStack.pop();
intStack.show();
break;
}
case 3: //退出
{
;
}
}
}while(!choice||choice!=3);
return 0;
}
--------------------------------------------------------------------------------------------------------------------------------------------------------
//ClassDef.h
//Creat at 2013-11-23
//模版类的声明和定义,以及选择菜单函数的实现
//Created by Kaka
//Latest update:2013-11-23
//指针修改为有符号数
#ifndef CLASSDEF_H
#define CLASSDEF_H
template <class T>
class Stack //栈模版类定义
{
public:
Stack(unsigned int size = 100); //构造器
~Stack(); //析构器
void push(T value); //入栈函数
T pop(); //出栈函数
void show(); //栈显示
private:
int size;
int sp;
T *data;
};
template <class T>
Stack<T>::Stack(unsigned int size)
{
this->size=size;
data = new T[size];
sp=0;
}
template <class T>
Stack<T>::~Stack()
{
delete []data;
}
template <class T>
void Stack<T>::push(T value) //入栈函数
{
if(sp<=size)
data[++sp]=value;
else
std::cout<<"栈已满,不能入栈,只能出栈!\n";
}
template <class T>
T Stack<T>::pop() //出栈函数
{
if(sp<=0)
{
std::cout<<"栈内无数据,请先入栈!\n";
return -1;
}
else
{
std::cout<<"出栈的数据是:"<<data[sp]<<std::endl;
return data[sp--];
}
}
template <class T>
void Stack<T>::show() //栈内容实时显示
{
if(sp<0)
{
std::cout<<"空栈!\n" ;
}
else
{
std::cout<<"栈内现在的数据为:";
for(int rp=sp;rp>0;rp--)
{
std::cout<<data[rp]<<"\t";
}
std::cout<<std::endl;
}
}
int Menushow() //菜单函数
{
int choose;
std::cout<<"选择操作:\t1、入栈\t2、出栈\t3、退出\n";
std::cin>>choose;
while(choose>3||choose<1)
{
std::cout<<"错误选择,重新选择:";
std::cin>>choose;
}
return choose;
}
#endif