【2013微软校招面试题】设计一个栈,当栈满时,新入栈的元素循环回第一个元素的位置将其覆盖

来源:互联网 发布:网络诽谤司法解释 编辑:程序博客网 时间:2024/05/17 07:09

 

问题,如标题所示~

 

解题:见代码如下

 

#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~

原创粉丝点击