zoukankan      html  css  js  c++  java
  • 双向链表

    // 双向线性链表


    #include <iostream>
    using namespace std;
    typedef struct node
    {
        int data;
        struct node * front;
        struct node *next;
    }NODE;
    typedef struct doublelist
    {
        NODE* head;
        NODE* tail;
    }LIST;
    LIST* create_list()
    {
        LIST* list = new LIST;
        list->head = NULL;
        list->tail = NULL;
        return list;
    }
    NODE* create_node(int data)
    {
        NODE* node = new NODE;
        node->data = data;
        node->front = NULL;
        node->next = NULL;
        return node;
    }
    void list_append(LIST* list, int data)
    {
        NODE* node = create_node(data);
        if(list->tail == NULL)
        {
            list->head = node;
            list->tail = node;
        }
        else
        {
            list->tail->next = node;
            node->front = list->tail;
            list->tail = node;
        }
    }
    void front_print(LIST* list)
    {
        NODE* node = NULL;
        for(node=list->head;node;node=node->next)
        {
            cout<<node->data<<" ";
        }
        cout<<endl;
    }
    
    
    void reverse_print(LIST* list)
    {
        NODE* node = NULL;
        for(node =list->tail;node;node=node->front)
        {
            cout<<node->data<<" ";
        }
        cout<<endl;
    }
    NODE* destroy_node(NODE* node)
    {
        NODE* next = node->next;
        delete node;
        return next;
    }
    void clear(LIST* list)
    {
        while(list->head)
        {
            list->head = destroy_node(list->head);
        }
        list->tail = NULL;
    }
    void destroy_list(LIST* list)
    {
        clear(list);
        delete list;
    }
    void list_insertAfter(LIST* list, int data,int pos) //后插 最起码应该第一个后面
    {
        NODE* find = NULL;
        for(find =list->head;find;find=find->next)
        {
            if(!--pos)
            {
                NODE* node =create_node(data);
                if(find->next == NULL)
                {
                    node->front =list->tail;
                    list->tail->next = node; list->tail = node;
                }
                else
                {
                    node->front = find;
                    node->next = find->next;
                    find->next->front =node;
                    find->next = node;
                }
            }
        }
    }
    void list_delete(LIST* list, int data)
    {
        NODE* Front = NULL;
        NODE* node = list->head;
        while(node)
        {
            if(data == node->data)
            {
                if(list->head ==node)
                {
                    list->head = node->next;
                    node->next->front = NULL;
                    delete node;
                    node = list->head;
                }
                else
                {
                    Front->next = node->next;
                    if(node->next != NULL)
                    {
                        node->next->front = Front;
                        delete node;
                        node = Front->next;
                    }
                    else
                    {
                        list->tail = node->front;
                        delete node;
                    }
                }
            }
            else
            {
                Front = node;
                node = node->next;
            }
        }
    }
    void list_insertFront(LIST* list,int data,int pos)
    {
        //NODE* front = NULL;
        NODE* find = NULL;
        for(find=list->head;find;find=find->next)
        {
            if(!--pos)
            {
                NODE* node = create_node(data);
                if(find==list->head)
                {
                    node->next = list->head;
                    list->head->front = node;
                    list->head = node;
                }
                else
                {
                    node->next = find;
                    node->front = find->front;
                    find->front->next = node;
                    find->front = node;
                }
            }
        }
    }
    int main()
    {
        LIST* list = create_list();
        for(int i=10;i<=50;i+=10)
        {
            list_append(list, i);
        }
        //    list_insertAfter(list,55,5);
        //    list_insertAfter(list,15,1);
        list_insertFront(list,15,2);
        list_insertFront(list,50,6);
         list_insertAfter(list,10,7);
        front_print(list);
        list_delete(list,10);
        front_print(list);
        reverse_print(list);
        destroy_list(list);
        return 0;
    }


    关注公众号 海量干货等你
  • 相关阅读:
    nginx error_log报错upstream timed out (110: Connection timed out)
    ubuntu12.04 nginx添加ssl认证
    TP5.0:同一个控制器访问不同方法
    TP5.0:的安装与配置
    html常用的小技能
    详情介绍win7:编辑文件夹时提示操作无法完成,因为其中的文件夹或文件已在另一个程序中打开的解决过程
    详细讲解:通过phpstudy 设置站点域名、站点域名管理
    tp3.2.3自定义全局函数的使用
    详细讲解:tp3.2.3生成验证码并进行验证(ajax校验返回及自定义返回)
    WPS去掉英语单词下面的红斜线
  • 原文地址:https://www.cnblogs.com/sowhat1412/p/12734502.html
Copyright © 2011-2022 走看看