• 2019年7月31日星期三(数据结构)


    2019731日星期三

    . 双向链表

    1. 双向链表的特征是什么?

    单向链表节点里只有一个后继指针next,所以单向链表只能往后指。

    双向链表节点里不仅仅有后继指针next,而是有前驱指针prev,双向链表既可以往前访问节点,也可以往后访问节点。

    2. 双向链表模型?

    struct list_node{

           /* 数据域 */

           ....;

     

           /* 指针域 */

           前驱指针...;

           后继指针...;

    };

    例子:假设该节点存放一个int类型的数据,那么节点结构体如何定义?

    struct list_node{

           int a;

           struct list_node *prev;

           struct list_node *next;

    };

    . 双向链表的增删改查?

    1. 初始化链表?

    struct list_node *init_list_head(struct list_node *head)

    {

           head = (struct list_node *)malloc(sizeof(struct list_node));

           if(head == NULL)

                  printf("malloc head error! ");

          

           head->prev = NULL;

           head->next = NULL;

          

           return head;

    }

    2. 尾插链表?

    int tail_add_list(struct list_node *head,int num)

    {

           struct list_node *Node = NULL;

           Node = (struct list_node *)malloc(sizeof(struct list_node));

           if(Node == NULL)

                  printf("malloc Node error! ");

          

           Node->a = num;

          

           struct list_node *p = NULL;

           for(p=head;p->next!=NULL;p=p->next);

          

           p->next = Node;

           Node->next = NULL;

           Node->prev = p;

          

           return 0;

    }

    3. 头插数据?

    int head_add_list(struct list_node *head,int num)

    {

           struct list_node *Node = NULL;

           Node = (struct list_node *)malloc(sizeof(struct list_node));

           if(Node == NULL)

                  printf("malloc Node error! ");

          

           Node->a = num;

          

           Node->next = head->next;

          

           if(head->next != NULL)

                  head->next->prev = Node;

          

           head->next = Node;

           Node->prev = head;

          

           return 0;

    }

    4. 遍历链表?

    int backward_show_list(struct list_node *head)

    {

           struct list_node *p = NULL;

           for(p=head;p->next!=NULL;p=p->next); //从循环中出来时,p就指向最后一个节点

          

           for(;p!=head;p=p->prev)

           {

                  printf("p->a:%d ",p->a);

           }

          

           return 0;

    }

     

    int forward_show_list(struct list_node *head)

    {

           struct list_node *p = NULL;

           for(p=head->next;p!=NULL;p=p->next)

           {

                  printf("p->a:%d ",p->a);

           }

          

           return 0;

    }

    5. 搜索节点?

    int search_list_node(struct list_node *head,int num)

    {

           struct list_node *p = NULL;

           for(p=head->next;p!=NULL;p=p->next)

           {

                  if(p->a == num)

                  {

                         printf("p->a:%d ",p->a);

                  }

           }

          

           return 0;

    }

    6. 删除节点?

    int delete_list_node(struct list_node *head,int num)

    {

           struct list_node *p = NULL;

           struct list_node *q = NULL;

          

           for(q=head,p=head->next;p!=NULL;q=p,p=p->next)

           {

                  if(p->a == num)

                  {

                         q->next = p->next;

                         if(p->next!=NULL) //说明删除的不是最后一个

                                p->next->prev = q;

                               

                         free(p);

                  }

           }

          

           return 0;

    }

    int delete_list(struct list_node *head)

    {

           struct list_node *p = NULL;

           struct list_node *q = NULL;

          

           for(p=q=head;p!=NULL;p=q)

           {

                  q = p->next;

                  free(p);

           }

          

           return 0;

    }

  • 相关阅读:
    codechef Graph on a Table
    CF1063F. String Journey
    BZOJ1547: 周末晚会
    maxsigma
    LOJ#2351. 「JOI 2018 Final」毒蛇越狱
    BZOJ3632: 外太空旅行
    图论:tarjan相关算法复习
    Codeforces 321E. Ciel and Gondolas(凸优化+决策单调性)
    5031. 【NOI2017模拟3.27】B (k次狄利克雷卷积)
    CSAcademy Round 10 Yury's Tree(有根树点分树或kruskal重构树)
  • 原文地址:https://www.cnblogs.com/zjlbk/p/11278395.html
Copyright © 2020-2023  润新知