64,281
社区成员
发帖
与我相关
我的任务
分享
#pragma once
struct NodeType
{
NodeType* next;
NodeType* back;
int info;
};
class SpecializedList
{
public:
SpecializedList(void);
~SpecializedList(void);
SpecializedList(const SpecializedList& somelist);
void ResetForward();
void GetNextItem(int& item, bool finished);
void ResetBackward();
void GetPriorItem(int& item, bool finished);
void InsertFront(int item);
void InsertEnd(int item);
int InsertItem(int item,int index);
int Length();
private:
NodeType* head;
NodeType* currentNextPos;
NodeType* currentBackPos;
int length;
};
#include "SpecializedList.h"
SpecializedList::SpecializedList(void)
{
length = 0;
head = NULL;
}
SpecializedList::~SpecializedList(void)
{
if(head != NULL)
{
head = head->next;
delete head;
}
else
delete head;
}
void SpecializedList::ResetForward()
{
currentNextPos = NULL;
}
void SpecializedList::GetNextItem(int &item, bool finished)
{
if(currentNextPos == NULL)
currentNextPos = head->next;
else
currentNextPos = currentNextPos->next;
item = currentNextPos->info;
finished = (currentNextPos == head);
}
void SpecializedList::ResetBackward()
{
currentBackPos = NULL;
}
void SpecializedList::GetPriorItem(int& item, bool finished)
{
if(currentBackPos == NULL)
currentBackPos = head;
else
currentBackPos = currentBackPos->back;
item = currentBackPos->info;
finished = (currentBackPos == head);
}
void SpecializedList::InsertFront(int item)
{
NodeType* newNode = new NodeType;
newNode->info = item;
if(head == NULL)
{
newNode->back = newNode;
newNode->next = newNode;
head = newNode;
}
else
{
newNode->back = head;
newNode->next = head->next;
head->next->back = newNode;
head->next = newNode;
}
length++;
}
void SpecializedList::InsertEnd(int item)
{
InsertFront(item);
head = head->next;
}
int SpecializedList::InsertItem(int item, int index)
{
if(index >= length)
return 0;
else
{
NodeType* p = head;
for(int i=1;i<index;i++)
{
p = p->next;
}
NodeType* newNode = new NodeType;
newNode->next = p->next;
newNode->back = p;
p->next->back = newNode;
p->next = newNode;
length++;
return 1;
}
}
int SpecializedList::Length()
{
return length;
}