//2014-5-14 BY KAKASI
//双向链表的练习
#include <iostream>
using namespace std;
//26个字母
const int size = 26;
//是否开启调试,检测资源申请及释放情况
const bool debug = false;
struct Node
{
char data;
Node *pre;
Node *next;
};
class DLink
{
public:
DLink();
~DLink();
void ChangeHead(int p);
void Display(bool base = false);
private:
//Head Node is a NULL Node
Node *Head;
//For Display and Change Head pointer position
Node *Reader;
};
DLink::DLink()
{
Head = new Node;
Head->pre = NULL;
Head->next = NULL;
Reader = Head;
if (debug)
cout << Head << "Created!" << endl;
Node *p;
Node *q;
p = q = Head;
for (int i = 0; i < size; ++i)
{
q = new Node;
q->data = 'A' + i;
q->pre = p;
q->next = NULL;
if (debug)
cout << q << "Created!" << endl;
p->next = q;
p = q;
}
Head->next->pre = q;
q->next = Head->next;
}
void DLink::ChangeHead(int p)
{
if (p == 0)
return;
Reader = Head->next;
while (p-- > 0)
{
Reader = Reader->next;
}
while(p++<0)
{
Reader = Reader->pre;
}
}
void DLink::Display(bool base)
{
Node *temp = NULL;
if (base)
temp = Head->next;
else
temp = Reader->next;
int i = size;
while (i-->0)
{
cout << temp->data;
temp = temp->next;
}
}
DLink::~DLink()
{
int i = size + 1;
Node *temp = NULL;
while (i-->0)
{
temp = Head;
Head = Head->next;
if (debug)
cout << temp << "released" << endl;
delete temp;
}
}
int main()
{
DLink dl;
dl.Display();
cout << endl;
int d;
cout << "please input a number:";
while(cin>>d)
{
cout << "old link is:";
dl.Display(true);
cout << endl;
dl.ChangeHead(d);
cout << "new link is:";
dl.Display();
cout << endl;
cout << "please input a number:";
}
}
运行结果: