作者:xinyaolin_857 | 来源:互联网 | 2023-10-10 20:22
《算法导论》10.1-5栈插入和删除元素只能在同一端进行,队列的插入操作和删除操作分别在两端进行,与它们不同的,有一种双端队列(deque),其插入和删除操作都可以在两端进行。写出4个时间均为
- 《算法导论》10.1-5 栈插入和删除元素只能在同一端进行,队列的插入操作和删除操作分别在两端进行,与它们不同的,有一种双端队列(deque),其插入和删除操作都可以在两端进行。写出4个时间均为O(1)的过程,分别实现在双端队列的两端插入和删除元素的操作,该队列是用一个数组实现的。
#include
template
class Deque
{
public:
Deque()
{
init();
}
Deque(const Deque& rhs)
{
init();
head = rhs.head;
size = rhs.size;
for(int i = head, idx; i != head + size; ++i)
{
idx = index(i);
p[idx] = rhs.p[idx];
}
}
Deque(Deque&& rhs):p(rhs.p),head(rhs.head),size(rhs.size)
{
rhs.p = nullptr;
rhs.head = rhs.size = 0;
}
Deque& operator =(const Deque& rhs)
{
Deque copy(rhs);
std::swap(copy.p, this->p);
std::swap(copy.head, this->head);
std::swap(copy.size, this->size);
return *this;
}
Deque& operator =(const Deque&& rhs)
{
std::swap(rhs.p, this->p);
std::swap(rhs.head, this->head);
std::swap(rhs.size, this->size);
return *this;
}
void push_front(const Object& object)
{
if(full())
{
std::cout <<"overflow" <= MAX_SIZE)
i -= MAX_SIZE;
else if(i <0)
i += MAX_SIZE;
return i;
}
};
void testDeque()
{
using namespace std;
struct Student
{
char name[10];
int age;
};
Deque dq;
dq.push_back(Student{"Tom", 12});
dq.push_back(Student{"Micheal", 13});
dq.push_back(Student{"Anna", 14});
dq.push_back(Student{"Lily", 10});
dq.push_back(Student{"James", 19});
decltype(dq) dq_copy(dq), dq_reverse;
while(!dq_copy.empty())
{
auto stu = dq_copy.pop_front();
dq_reverse.push_front(stu);
}
dq_copy.pop_front();
while(!dq_reverse.empty())
{
auto stu = dq_reverse.pop_back();
cout <<"name: " <