数据结构与算法实验7——队列
2021/11/14 9:09:47
本文主要是介绍数据结构与算法实验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;
}
这篇关于数据结构与算法实验7——队列的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-02Java管理系统项目实战入门教程
- 2024-11-02Java监控系统项目实战教程
- 2024-11-02Java就业项目项目实战:从入门到初级工程师的必备技能
- 2024-11-02Java全端项目实战入门教程
- 2024-11-02Java全栈项目实战:从入门到初级应用
- 2024-11-02Java日志系统项目实战:初学者完全指南
- 2024-11-02Java微服务系统项目实战入门教程
- 2024-11-02Java微服务项目实战:新手入门指南
- 2024-11-02Java项目实战:新手入门教程
- 2024-11-02Java小程序项目实战:从入门到简单应用