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

 

问题,如标题所示~

 

解题:见代码如下

 

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值