我真的要疯啦 我的这个程序 显示操作无法完成 求栈长操作也无法完成 在读取栈顶元素的时候 一旦有一个出栈操作 读取栈顶元素就会操作不了 但是不出栈又可以运行 还有好多问题啊!求大家的帮助 谢谢大家!!
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////
//栈的定义:
template <class T>
class Stack{
public:
void clear();
bool push (const T item);
bool pop (T &item);
bool high (T &item);
void isEmpty();
void isFull();
void display();
bool create(const T item);
bool destory();
int length( );
};
template <class T>
class Link{
public:
T data;
Link<T> * next;
};
////////////////////////////////////////////////////////
//构造函数:
template <class T>
class InkStack : public Stack <T>
{
private:
Link<T> * top; //指向栈顶的指针;
int size;
public:
InkStack ( )
{
top=NULL;
size=0;
}
//////////////////////////////////////////////////////////
//析构函数:
~InkStack ()
{
clear();
}
///////////////////////////////////////////////////////////////////
//清空栈的内容:
void clear()
{
if(top==NULL)
{
cout<<"该链式栈已经为空栈,清除失败!"<<endl;
}
else
{
Link <T> *tmp;
while(top!=NULL)
{
tmp=top;
top=top->next;
delete tmp;
}
cout<<"清除操作成功,链式栈已经为空!"<<endl;
}
}
////////////////////////////////////////////////////////////////////
//入栈操作的实现:
bool push (const T item)
{
Link <T> *tmp=new Link <T>;
top=tmp;
top->data=item;
size++;
return true;
}
/////////////////////////////////////////////////////////////////////
//出栈操作的实现:
bool pop (T &item)
{
if(top==NULL)
{
cout<<"该链式栈为空栈,出栈失败!"<<endl;
return false;
}
else
{
item = top -> data;
Link<T> *tmp;
tmp = top;
top=top->next;
delete tmp ;
size--;
return true;
}
}
///////////////////////////////////////////////////////////////////////
//读取栈顶元素的操作;
bool high (T &item)
{
if(top==NULL)
{
cout<<"该链式栈为空栈,读取栈顶元素失败!"<<endl;
return false;
}
else
{
item = top->data;
return true;
}
}
///////////////////////////////////////////////////////////////////////
//判断栈是否为空的操作:
void isEmpty()
{
if(top==NULL)
{
cout<<"该链式栈为空栈!"<<endl;
}
else
{
cout<<"该链式栈不为空栈!"<<endl;
}
}
///////////////////////////////////////////////////////////////////////
//判断链式栈是否为满的操作:
void isFull()
{
if(top==NULL)
{
cout<<"该链式栈为空!"<<endl;
}
else
{
cout<<"该链式栈还没有满!"<<endl;
}
}
/////////////////////////////////////////////////////////////////////////
//显示链式栈元素的操作;
void display()
{
if(top==NULL)
{
cout<<"该链式栈为空栈,显示失败!"<<endl;
}
else
{
Link<T> *tmp;
tmp=top;
while(tmp->next!=NULL)
{
cout<< tmp->data <<' ';
tmp=tmp->next;
}
cout<<endl;
}
}
///////////////////////////////////////////////////////////////////////////
//创建链式栈的操作;
bool create(const T item)
{
if(!top)
{
size=item;
top=NULL;
return true;
}
else
{
cout<<"该链式表创建失败,已经存在链式表!"<<endl;
return false;
}
}
/////////////////////////////////////////////////////////////////////////////
//销毁链式表的操作;
bool destory()
{
if(!top)
{
cout<<"该链式栈已经被销毁不存在!"<<endl;
return false;
}
else
{
Link<T> * tmp; //定义指向结点的指针
while(top!=NULL)
{
tmp=top; //tmp指向当前结点
top=top->next; //head指向下一结点
delete tmp;
}
return true;
}
}
//////////////////////////////////////////////////////////////////////////////
//求长度的操作;
int length( )
{
int i=0;
Link <T> *tmp;
while(top!=NULL)
{
tmp=top->next;
i++;
top=tmp;
}
return i;
}
///////////////////////////////////////////////////////////////////////////////
};
void main()
{
InkStack <char> IL;
bool ok;
int choice;
char item;
do {
cout<<"请选择(0退出, 1清除, 2入栈, 3出栈, 4读取栈顶内容, 5判断表空, 6判断表满, 7显示, 8消除,9创建,10栈长):"<<endl;
cin>>choice;
switch (choice) {
case 0:
cout<<"再见噢!"<<endl;
break;
case 1:
IL. clear();
break;
case 2:
cout<<"你要入栈的元素为:"<<endl;
cin>>item;
ok=IL.push(item);
if(ok==true)
cout<<"入栈操作成功!"<<endl;
break;
case 3:
ok=IL.pop(item);
if(ok==true)
{
cout<<"出栈操作成功,此时的出栈的元素为:"<< item <<endl;
}
break;
case 4:
ok=IL. high (item);
if(ok==true)
{
cout << "栈顶的元素为:" << item << endl;
}
break;
case 5:
IL.isEmpty();
break;
case 6:
IL.isFull();
break;
case 7:
IL.display();
break;
case 8:
ok=IL.destory();
if(ok==true)
{
cout<<"销毁操作成功!"<<endl;
}
break;
case 9:
cout<<"你所要创建顺序栈的长度为:"<<endl;
cin>>item;
ok=IL.create(item);
if(ok==true)
{
cout <<"创建顺序栈操作成功!"<<endl;
}
break;
case 10:
cout<<"该链式栈的长度为:"<<IL.length();
cout<<endl;
break;
default: cout <<"您的选择错误!"<<endl;
}
} while (choice != 0);
}