C++进栈,出栈,清空栈问题求解
using namespace std ;
#define MAX 1000
template<typename T>
class myStack{
public:
myStack( )//Constructor
{
top=-1;
size=MAX;
stack=new T[ MAX ];
}
~myStack() {
delete [] stack ;
}
void push( T );
T pop();
bool empty();
void clear();
private:
T *stack;
int top,size;
};
template<typename T>
void myStack<T>::clear()
{
/*
delete []stack ;//
top=-1;
size=0;
stack=NULL;
*/
top=-1; //不清栈体,只把栈指针移到空位
}
template<typename T>
void myStack<T>::push( T e)
{
stack[++top]=e ;
}
template<typename T>
bool myStack<T>::empty()
{
if ( top < 0 )
return true ;
return false ;
}
template<typename T>
T myStack<T>::pop()
{
return stack[top--];
}
int main()
{
myStack <int> s;
for( int i=0;i<10;i++ )
s.push( i+1 );
while( !s.empty() )
cout << s.pop() << " " ;
cout <<endl;
myStack <float> fs;
for( int j=0;j<10;j++ )
fs.push( j+1 );
while( !fs.empty() )
cout << fs.pop() << " " ;
cout <<endl;
return 0;
}
设置了进栈但是结果输出就只有如下:
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
Press any key to continue
进栈函数里直接就输入了,怎么改成一个自己输出数据的进栈,就是结果不是已有的要自己输入数据测试 展开
主函数这样修改一下,即可显示入栈出栈:
int main()
{
myStack <int> s;
cout <<"PUSH:" ;
for( int i=0;i<10;i++ ){s.push( i+1 );cout<<i+1<<",";} cout <<endl;
cout <<"POP:";
while(!s.empty() )cout<<s.pop()<<" " ;cout <<endl;
myStack <float> fs;
cout <<"PUSH:" ;
for( int j=0;j<10;j++ ){fs.push( j+1 );cout <<j+1<<",";} cout <<endl;
cout <<"POP:";
while(!fs.empty() ) cout << fs.pop()<<" ";
cout <<endl;
system("PAUSE");
return 0;
}
结果如图:
看来我的问题没写明白,我要的事自己输入一个数据,例如我输入一个2你给我输出一2的进栈出栈数据,你这改的还是以前的意思数据在代码中已经有了。
改为录入方式即可:
int main()
{
myStack <int> s;
int bl=0;
cout <<"PUSH:" ;
for( int i=0;i<10;i++ ){cin>>bl;s.push( bl );}cout <<endl;
cout <<"POP:";
while(!s.empty() )cout<<s.pop()<<" " ;cout <<endl;
myStack <float> fs;
cout <<"PUSH:" ;
for( int j=0;j<10;j++ ){cin>>bl;fs.push(bl);} cout <<endl;
cout <<"POP:";
while(!fs.empty() ) cout << fs.pop()<<" ";
cout <<endl;
system("PAUSE");
return 0;
}