// Double_List.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include <iostream>#include <fstream>#include "conio.h"using namespace std;struct _DOUBLE_LINK_NODE //定义一个双链表结构
{ char * data; struct _DOUBLE_LINK_NODE* prev; //双链表的前驱 struct _DOUBLE_LINK_NODE* next;//双链表的后驱} ;class DoubleList
{ private:public: struct _DOUBLE_LINK_NODE * Head; DoubleList() { Head = (struct _DOUBLE_LINK_NODE *) malloc (sizeof(_DOUBLE_LINK_NODE)); memset(Head, 0, sizeof(_DOUBLE_LINK_NODE)); } ~DoubleList() { } struct _DOUBLE_LINK_NODE * create_double_link_node(char * value) { struct _DOUBLE_LINK_NODE* pnode; pnode =(_DOUBLE_LINK_NODE *)malloc(sizeof(_DOUBLE_LINK_NODE)); memset(pnode,0,sizeof(_DOUBLE_LINK_NODE)); pnode->data=(char *)malloc(strlen(value)+1); memset(pnode->data,0,strlen(value)+1); memcpy(pnode->data,value,strlen(value)); pnode->prev=(struct _DOUBLE_LINK_NODE *)malloc(sizeof(_DOUBLE_LINK_NODE)); memset(pnode->prev,0,sizeof(_DOUBLE_LINK_NODE)); memcpy(pnode->prev,pnode,sizeof(_DOUBLE_LINK_NODE)); return pnode; }_DOUBLE_LINK_NODE* find_data_in_double_link(char * data)
{ _DOUBLE_LINK_NODE* pNode = Head; int count=count_number_in_double_link(); //for(;pNode && pNode->next;pNode = pNode->next) if (data==NULL) { return NULL; } else { for(int i=0;i<count;i++) { if (pNode->data && strcmp(pNode->data, data) == 0) { return pNode; } else { pNode = pNode->next; } } } return NULL; }bool insert_data_into_double_link(_DOUBLE_LINK_NODE *node,char * data)
{ _DOUBLE_LINK_NODE * pNode=Head; _DOUBLE_LINK_NODE * findNode= NULL; int count=count_number_in_double_link(); if (find_data_in_double_link(data)!=NULL) { findNode=find_data_in_double_link(data); } else { for(int i=0;i<count;i++) { if (pNode->next==NULL) { findNode=pNode; } else { pNode = pNode->next; } } } if (pNode->data==NULL && pNode->next ==NULL) { pNode->next=node->prev; node->prev=pNode; } else { if (findNode->next==NULL) { pNode->next=node->prev; node->prev=pNode; } else { node->next=findNode->next->prev; findNode->next=node; node->prev=findNode->prev; node->next->prev=node; } } return true; }bool delete_data_from_double_link(char * data) { _DOUBLE_LINK_NODE* pNode; pNode=find_data_in_double_link(data);
//*pNode->next->prev = *pNode->prev;
if (pNode->next!=NULL) { pNode->next->prev=pNode->prev; pNode->prev->next = pNode->next; } else { pNode->prev->next = pNode->next; } free(pNode); return true; } void print_double_link_node() { _DOUBLE_LINK_NODE *DoubleList =Head; while(NULL != DoubleList){ printf("%s\n", DoubleList->data); DoubleList = DoubleList ->next; } }int count_number_in_double_link()
{ int count = 0; _DOUBLE_LINK_NODE *DoubleList =Head;while(NULL != DoubleList){
count ++; DoubleList = DoubleList->next; } return count; }};int _tmain(int argc, _TCHAR* argv[])
{ DoubleList *list=new DoubleList(); char * str="Hello word!你好~~"; char * dd="jsgw"; _DOUBLE_LINK_NODE *node= list->create_double_link_node(str); _DOUBLE_LINK_NODE * node1=list->create_double_link_node(dd); list->insert_data_into_double_link(node,NULL); list->insert_data_into_double_link(node1,NULL); node= list->create_double_link_node("hello world!");list->insert_data_into_double_link(node,"adf");
int d=list->count_number_in_double_link();
list->print_double_link_node(); printf("链表中共有%d条数据\n",d);printf("删除数据:");
char * str1="hello world!";int a;
cin>>a; if (a==0) { list->delete_data_from_double_link(str1); list->print_double_link_node(); } cin.get();}