我提前道歉,因为解释起来很复杂,所以尽我所能。我有一个包含数百万个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分钟内迭代列表。并再次进行计算。我不确定我的双重链接列表的想法是实现我的目标的最佳选择。如果有人有一个更好的建议我都是耳朵,但我也非常业余编码所以请轻松我的天真。