问题,如标题所示~
解题:见代码如下
#include <iostream>
#include <assert.h>
using namespace std;
class RecycleStack{
public:
RecycleStack(int MaxSize):maxSize(MaxSize),curSize(0),tail(0)
{
s_arr = new int[maxSize];
}
~RecycleStack()
{
delete []s_arr;
}
void push(int value)
{
if(curSize < maxSize) //栈未满,正常入栈
{
s_arr[curSize++] = value;
}
else //栈已满,覆盖栈底
{
s_arr[tail] = value;
tail = (tail+1) % maxSize; //有可能循环回到s_arr[0]位置
}
}
void pop()
{
assert(curSize != 0); //参数检查
curSize--;
}
int top()
{
return s_arr[(tail -1 + curSize) % maxSize];
}
bool empty()
{
return curSize == 0;
}
private:
int maxSize;
int curSize;
int *s_arr; //存储栈中的数据
int tail; //指向栈底元素
};
int main()
{
RecycleStack a(4);
int arr[8] = {6,5,3,1,8,2,9,4};
for(int i=0; i<8; i++)
{
a.push( arr[i] );
cout<<"栈顶为:"<<a.top()<<endl;
}
return 0;
}
欢迎读者留言探讨,O(∩_∩)O~