#c #linked-list #singly-linked-list #deque #sentinel
#c #связанный список #single-linked-list #деке #страж
Вопрос:
Я хотел бы использовать sentinel в моей реализации связанного списка, чтобы упростить некоторые функции.
Однако Deque() = defau<
конструктор сбивает меня с толку.
Откуда он знает, что он должен установить head = tail, за которым следует sentinel для первоначального построения Deque связанного списка без элементов, когда я не могу / не могу определить его для этого?
Это просто домашнее задание для одного из моих классов, которое я пытаюсь проработать и понять. Нас не просили использовать sentinels, но я бы хотел.
Deque.cpp
//2 example functions using sentinels
#include "Deque.h"
#include <iostream>
#include <memory>
using std::cout;
using std::endl;
bool Deque::empty() const
{
if ((head->next == tail) amp;amp; (tail->next == sentinel))
{return true;}
return false;
}
int Deque::size() const
{
int size_val = 0;
const Node* p = head.get();
while ( p != sentinel)
{
size_val ;
p = p->next.get();
}
return size_val;
}
Deque.h
#include "Node.h"
#include <memory>
class Deque{
public:
Deque() = default;
Deque(const Dequeamp;);
~Deque(); // const space
Dequeamp; operator=(const Dequeamp;);
bool empty() const;
int size() const;
private:
friend Node;
std::unique_ptr<Node> sentinel;
std::unique_ptr<Node> head ;
std::unique_ptr<Node> tail ;
};
Node.h
#ifndef NODE_H
#define NODE_H
#include <iostream>
#include <memory>
class Node {
public:
Node(const Nodeamp; n) : val{n.val}, next{}
{
}
Node(int v, std::unique_ptr<Node> n) : val{v}, next{move(n)}
{
}
Node(int v) : val{v}
{
}
private:
int val = 0;
std::unique_ptr<Node> next = nullptr;
friend class Deque;
friend std::ostreamamp; operator<<(std::ostreamamp;, const Nodeamp;);
};
#endif
Комментарии:
1. Я предполагаю, что здесь означает sentinel
NULL
, потому что после tail вам нечего будет получить или пройти.2. Если конструктор сбивает вас с толку, почему вы написали его так?
3. исправьте это: if ((head->next = tail) amp;amp; (tail-> next = sentinel)) . изменить на ==
4. @molbdnilo его домашнее задание — я не могу это изменить.