編譯無問題但卻無法運行,技術小白求教各位大神!!
#include<iostream>
#include<algorithm>
class stack{
public:
virtual ~stack(){
}
virtual bool empty() const=0;
virtual int size() const=0;
virtual int& top() const=0;
virtual void pop()=0;
virtual void push(const int& theelement)=0;
};
class arraystack:public stack{
public:
arraystack(int initialstack);
~arraystack();
bool empty() const;
int size() const;
int& top() const;
void pop();
void push(const int&);
private:
int stackTop;
int* stack;
int arraylength;
};
void changeLength1D(int* a,int oldlength,int newlength)
{
int* b=new int[newlength];
std::copy(a,a+oldlength,b);
delete []a;
a=b;
}
arraystack::arraystack(int initialstack)
{
if(initialstack<1)
std::cerr<<"空堆疊!"<<std::endl;
stack=new int[initialstack];
arraylength=initialstack;
stackTop=-1;
}
arraystack::~arraystack()
{
delete []stack;
}
bool arraystack::empty() const
{
return (stackTop<0);
}
int arraystack::size() const
{
return (stackTop+1);
}
int& arraystack::top() const
{
if(stackTop==-1)
std::cerr<<"空堆疊!"<<std::endl;
else
return stack[stackTop];
}
void arraystack::pop()
{
if(stackTop==-1)
std::cerr<<"空堆疊!"<<std::endl;
else
{
delete stack;
--stackTop;
--arraylength;
}
}
void arraystack::push(const int& theelement)
{
if(stackTop==arraylength-1)
{
changeLength1D(stack,arraylength,2*arraylength);
arraylength=2*arraylength;
stack[++stackTop]=theelement;
}
else
{
stack[++stackTop]=theelement;
}
}
int main()
{
arraystack a1(10);
for(int i=0;i<19;++i)
a1.push(i);
a1.push(9);
a1.pop();
std::cout<<a1.top()<<" "<<a1.size()<<std::endl;
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/100275.html
標籤:基礎類
上一篇:四種PHP異步執行的常用方式
下一篇:PHP如何開啟swoole擴展
