zoukankan      html  css  js  c++  java
  • 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;

    }

  • 相关阅读:
    jmeter-实用插件
    python学习笔记
    TODO redis学习笔记
    查询redis数据
    【洛谷P1341】无序字母对
    【洛谷P1100】高低位交换
    【洛谷P1118】数字三角形
    【洛谷P1538】迎春舞会之数字舞蹈
    【洛谷P2947】向右看齐
    【洛谷P1351】[NOIP2014]联合权值
  • 原文地址:https://www.cnblogs.com/zjlbk/p/11278395.html
Copyright © 2011-2022 走看看