1 | node_buffer定义了一个用于存储int型数据的缓冲器,请实现其声明的所有成员方法,并满足如下要求: 1.除非调用pop_front,否则push_back成功的数据节点不可移除; 2.不可添加给定之外的数据成员和成员方法; | 输入的第一行指定用例数量T; 用例的第一行输入指定队列的最大节点数K; 用例的第二行输入指定插入的节点数量M; 用例的第三行输入指定插入的节点数值,使用空格隔开; 用例的第四行输入指定移除的节点数量N; | node_buffer中剩余的节点数据值,使用空格隔开; | K > 0 | class node_buffer { public: // 构造函数 // 参数: max_size 指定缓冲的最大节点数 node_buffer(int max_size); // 析构函数 ~node_buffer(); // 从队尾插入一个数据节点 // 参数:i 待插入节点 // 返回值:true 插入成功 // false 插入失败,表示数据节点个数达到最大值 bool push_back(int i); // 从队首移除一个数据节点 // 返回值:true 移除成功 // false 移除失败,表示数据节点个数为0 bool pop_front(); // 获取队首节点值,不移除数据 int front(); // 获取队尾节点值,不移除数据 int back(); // 获取数据节点数量 // 返回值:数据节点数量 int size(); private: int* m_queue; int m_max_size; int m_front; int m_back; int m_size; }; Input: 1 8 9 1 2 3 4 5 6 7 8 9 4 Output: 5 6 7 8 |
实际上是手动实现一个队列,也很简单。哎,好久没用指针了。。真的不习惯。。。
#include "iostream"
#include "algorithm"
#include "vector"
#include "string"
using namespace std;
class node_buffer
{
public:
// 构造函数
// 参数: max_size 指定缓冲的最大节点数
node_buffer(int max_size);
// 析构函数
~node_buffer();
// 从队尾插入一个数据节点
// 参数:i 待插入节点
// 返回值:true 插入成功
// false 插入失败,表示数据节点个数达到最大值
bool push_back(int i);
// 从队首移除一个数据节点
// 返回值:true 移除成功
// false 移除失败,表示数据节点个数为0
bool pop_front();
// 获取队首节点值,不移除数据
int front();
// 获取队尾节点值,不移除数据
int back();
// 获取数据节点数量
// 返回值:数据节点数量
int size();
private:
int* m_queue;
int m_max_size;
int m_front;
int m_back;
int m_size;
};
node_buffer::node_buffer(int max_size)
{
m_max_size = max_size;
m_queue = new int[max_size];
m_front = 0;
m_back = 0;
m_size = 0;
}
node_buffer::~node_buffer()
{
//delete[] m_queue;
}
bool node_buffer::push_back(int i)
{
if (m_size < m_max_size)
{
m_back = i;
m_queue[m_size] = i;
m_size++;
return true;
}
else
return false;
}
bool node_buffer::pop_front()
{
if (m_size > 0)
{
m_size--;
m_queue++;
m_front = *m_queue;
return true;
}
else
return false;
}
int node_buffer::front()
{
return m_front;
}
int node_buffer::back()
{
return m_back;
}
int node_buffer::size()
{
return m_size;
}
int main()
{
int num;
cin >> num;
vector<vector<int>> res(num);
for (int k = 0; k < num;k++)
{
int max_size;
cin >> max_size;
node_buffer nb(max_size);
int push_num;
cin >> push_num;
vector<int> data(push_num, 0);
for (int i = 0; i < push_num; i++)
cin >> data[i];
if (push_num > max_size)
push_num = max_size;
data.resize(push_num);
for (int i = 0; i < push_num; i++)
nb.push_back(data[i]);
int pop_num;
cin >> pop_num;
if (pop_num > nb.size())
pop_num = nb.size();
for (int i = 0; i < pop_num; i++)
nb.pop_front();
int length = nb.size();
for (int i = 0; i < length; i++)
{
res[k].push_back(nb.front());
nb.pop_front();
}
}
for (int i = 0; i < res.size(); i++)
{
for (int j = 0; j < res[i].size(); j++)
{
if (j == res[i].size() - 1)
cout << res[i][j];
else
cout << res[i][j] << " ";
}
cout << endl;
}
while (1);
return 0;
}
//4
//8
//9
//11 12 14 13 15 26 437 18 39
//4
//6
//8
//12 12 33 14 35 46 17 58
//3
//8
//9
//113 3122 43 1234 54 126 37 128 219
//4
//6
//8
//1313 41242 31233 413 3125 63 17 8313
//3