数据结构与算法实验7——队列

1.实验内容

创建循环队列类,采用数组描述;实现卡片游戏,假设桌上有一叠扑克牌,依次编号为1-n(从最上面开始)。当至少还有两张的时候,可以进行操作:把第一张牌扔掉,然后把新的第一张放到整叠牌的最后。输入n,输出最后剩下的牌。

输入输出格式:

输入:

一个整数n,代表一开始卡片的总数。

输出:

最后一张卡片的值。

2.测试结果

输入:

100

输出:

72

3.实现源代码

#include<iostream>

using namespace std;

template<class T>

void changeLength(T *&a,int oldLength,int newLength) //改变数组的长度

{

T *temp=new T[newLength];

int number=min(oldLength,newLength);

copy(a,a+number,temp);

delete []a;

a=temp;

}

template<class T>

class arrayQueue //循环队列类

{

public:

arrayQueue(int initialCapacity=10) //构造函数

{

arrayLength=initialCapacity;

queue=new T[arrayLength];

queueFront=0;

queueBack=0;

}

~arrayQueue() //析构函数

{

delete []queue;

}

void pop() //删除队首元素

{

queueFront=(queueFront+1)%arrayLength;

queue[queueFront].~T();

}

void push(const T& theElement) //添加元素到队尾

{

if(queueFront==(queueBack+1)%arrayLength) //如果队列已满,扩充容量

{

changeLength(queue,arrayLength,2*arrayLength);

arrayLength*=2;

}

queueBack=(queueBack+1)%arrayLength;

queue[queueBack]=theElement;

}

T& front() //返回队首元素

{

return queue[(queueFront+1)%arrayLength];

}

T& back() //返回队尾元素

{

return queue[queueBack];

}

private:

int arrayLength; //数组容量

int queueFront; //队首下标

int queueBack; //队尾下标

T* queue; //队列元素数组

};

int main()

{

int n;

cin>>n; //输入初始牌数

arrayQueue<int> a(n); //创建队列对象

for(int i=0;i<n;i++) //添加初始的n张牌

a.push(i+1);

int temp;

for(int i=1;i<n-1;i++) //牌数不小于2时进行操作

{

a.pop();

temp=a.front();

a.pop();

a.push(temp);

}

cout<<a.back()<<endl; //输出最后剩余牌的序号

return 0;

}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值