双向链表遍历和迭代C ++

时间:2017-12-15 19:50:59

标签: c++ doubly-linked-list

我提前道歉,因为解释起来很复杂,所以尽我所能。我有一个包含数百万个unix时间戳和其他数据的文件。所以我想在第一个读取一个开始时间,添加两个星期停止时间,我不知道将加载多少个节点,它将继续读入,直到时间戳从开始两周。当它完成生病时移动我的开始并停止前进5分钟并删除它后面的所有内容并读入直到它再次停止。我试图实现一个双向链表,因为我认为这将是最聪明的数据结构来做我想要的。这是我到目前为止所做的。

#include <fstream>
#include <iostream>
using namespace std;
#ifndef IMPORTEXPORT_H
#define IMPORTEXPORT_H



//*****************************************************************************
//
//*****************************************************************************

template <class DT>
struct Node
{
    DT list;
    Node<DT> *next;
    Node<DT> *Prev;
};

//*****************************************************************************
//
//*****************************************************************************

template<class DT>
class List
{
private:
    Node<DT> *current;
    Node<DT> *head;
    Node<DT> *tail;
public:
    List();
    ~List();
    bool first(void);
    bool last(void);
    void insert(DT item);
    bool getNext(void);
    bool getPrev(void);
    void erase(DT item);
    DT pullCurrent(void);
};

//*****************************************************************************
//
//*****************************************************************************

template<class DT>
List<DT>::List()
{
    current = NULL;
    head = NULL;
    tail = NULL;
}

//*****************************************************************************
//
//*****************************************************************************

template <class DT>
List<DT>::~List()
{
    while (head != NULL)
    {
        current = head;
        head = head->next;
        delete current;
    }
    current = NULL;
    tail = NULL;
}

//*****************************************************************************
//
//*****************************************************************************

template<class DT>
bool List<DT>::first()
{
    bool found = false;
    if (this->head != NULL)
    {
        this->current = this->head;
        found = true;
    }
    return found;
}

//*****************************************************************************
//
//*****************************************************************************

template<class DT>
bool List<DT>::last()
{
    bool found = false;
    if (this->tail != NULL)
    {
        this->current = this->tail;
        found = true;
    }
    return found;
}

//*****************************************************************************
//
//*****************************************************************************

template<class DT>
void List<DT>::insert(DT item)
{
    Node<DT>* pNew = new Node<DT>;
    pNew->list = item;
    if(tail)
    {
        pNew->Prev = tail;
        tail->next = pNew;
        tail = pNew;
        this->current = this->tail;
    }
    if(!tail)
    {
        tail = head = current = pNew;
    }
}

//*****************************************************************************
//
//*****************************************************************************

template<class DT>
bool List<DT>::getNext()
{
    bool found = false;
    this->current = current->next;
    if (this->current != NULL)
    {
        found = true;
    }
    return found;
}

//*****************************************************************************
//
//*****************************************************************************

template<class DT>
bool List<DT>::getPrev()
{
    bool found = false;
    this->current = current->Prev;
    if (this->current != NULL)
    {
        found = true;
    }
    return found;
}

//*****************************************************************************
//
//*****************************************************************************

template <class DT>
void List<DT>::erase(DT item)
{
    Node<DT>* ptr;
    this->ptr = this->head;
    head = head->next;
    delete ptr;
}

//*****************************************************************************
//
//*****************************************************************************

template <class DT>
DT List<DT>::pullCurrent()
{
    DT newnode;
    newnode = current->list;
    return newnode;
}

//*****************************************************************************
//
//*****************************************************************************

#endif

因为文件具有所有时间戳,因此我认为尾部是“现在”而头部是“过去”。一旦我在前两周阅读,我将从“现在”回顾并在最后15分钟进行计算,然后将当前节点发回“现在”并返回1天,再做1周,然后在整整两周内再做一次。一旦完成所有这些计算,我将在5分钟内迭代列表。并再次进行计算。我不确定我的双重链接列表的想法是实现我的目标的最佳选择。如果有人有一个更好的建议我都是耳朵,但我也非常业余编码所以请轻松我的天真。

0 个答案:

没有答案