Java教程

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

本文主要是介绍数据结构与算法实验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——队列的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!