//doubleLinkList.h
# ifndef __DOUBLE_LINK_LIST_H__
# define __DOUBLE_LINK_LIST_H__
#include <iostream>
#include <string>
using namespace std;
typedef struct DataInfo
{
string str;
}DATA_INFO, *LPDATA_INFO;
typedef struct linkNode
{
DATA_INFO data;
struct linkNode* prev;
struct linkNode* next;
}LINK_NODE, *LPLINK_NODE;
# endif//__DOUBLE_LINK_LIST_H__
// doubleLinkList.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "doubleLinkList.h"
LINK_NODE* testLink = NULL;
LINK_NODE* head = NULL;
void InitLink(int n)
{
head = new LINK_NODE();
head->data.str = "";
head->next = head;
head->prev = head;
LINK_NODE* s;
LINK_NODE* p;
p = head;
char cinput[100] = {""};
for (int i=0; i<n; i++)
{
s = new LINK_NODE();
memset(cinput, 0, 100);
cout<<"写入第"<<i+1<<":";
cin>>cinput;
cout<<" "<<cinput<<endl;
s->data.str = cinput;
s->prev = p;
s->next = NULL;
p->next = s;
p = s;
}
p->next = head;
head->prev = p;
}
void display(LINK_NODE* head)
{
if(NULL == head)
{
cout<< "head = NULL"<<endl;
return;
}
int i = 1;
LINK_NODE* p = head->next;
for (; p!=head; p=p->next,i++)
{
cout<<"第"<<i<<"项:"<<p->data.str.c_str()<<" ";
}
cout<<endl;
}
void deleteNode(LINK_NODE** Node)
{
LINK_NODE* pl = (*Node)->prev;
LINK_NODE* pr = (*Node)->next;
pr->prev = pl;
pl->next = pr;
delete (*Node);
*Node = NULL;
}
void addNode(LINK_NODE* Node)//在Node后添加新节点
{
LINK_NODE* p = Node->next;
LINK_NODE* s = new LINK_NODE();
s->data.str = "abcd";
Node->next = s;
s->prev = Node;
p->prev = s;
s->next = p;
}
void distroy(LINK_NODE** head)
{
LINK_NODE* p = (*head)->next;
LINK_NODE* temp = NULL;
while(p!=(*head))
{
temp = p->next;
delete p;
p = temp;
}
delete *head;
*head = NULL;
}
int _tmain(int argc, _TCHAR* argv[])
{
InitLink(3);
display(head);
addNode(head);
addNode(head);
display(head);
distroy(&head);
display(head);
return 0;
}