博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++实现双链表
阅读量:5064 次
发布时间:2019-06-12

本文共 3528 字,大约阅读时间需要 11 分钟。

// 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();
}

转载于:https://www.cnblogs.com/wind-net/archive/2012/07/17/2595571.html

你可能感兴趣的文章
Jquery ajax调用webservice总结
查看>>
职业生涯【1】选择职业
查看>>
实用手册:130+ 提高开发效率的 vim 常用命令
查看>>
基于 jQuery & CSS3 实现智能提示输入框光标位置
查看>>
Nibbler – 免费的网站测试和指标评分工具
查看>>
转-使用EditPlus技巧,提高工作效率
查看>>
ACM/ICPC 之 电力网络-EK算法(POJ1459)
查看>>
wordpress 支持上传中文名称文件
查看>>
中国剩余定理---FZU 1402 猪的安家
查看>>
最近在线笔试的一些感想和总结,阿里巴巴,腾讯,百度,360。c++研发,机器学习等岗位...
查看>>
eclipse 中文版 变成 英文版 方法
查看>>
系统设计
查看>>
二维码扫描
查看>>
js页面滚动浮动层智能定位(MooTools)实例页面
查看>>
前端加密技术
查看>>
JS之表单验证
查看>>
Python操作MongoDB数据库
查看>>
VMware 锐捷 NAT模式的服务自动关闭的解决办法
查看>>
MFC 打开文件夹 调用其他程序 打开文件
查看>>
1058. A+B in Hogwarts (20)
查看>>