• 双向循环链表及内核链表


    1.双向循环链表原理图

     设计双向循环链表节点

    typedef struct _DCLink{
        struct _DCLink *prev;
        struct _DCLink *next;
        int data;
    }DCLink;

    设计双向循环链表的接口

    1.创建链表节点

    DCLink *create_node(elemType data);

    2.创建链表

    DCLink *crate_dclink();

    3.插入数据

    bool insert_dclink(DCLink *head,elemType data);

    4.删除数据

    bool delete_dclink(DCLink *head,elemType data);

    5.查找

    DCLink *local_dclink(DCLink *head,elemType data);

    6.显示

    void display_dclink(DCLink *head);

    下面是示例代码

    dclink.h

    #ifndef DCLINK_H
    #define DCLINK_H

    #include <stdio.h>
    #include <stdbool.h>
    #include <stdlib.h>
    #include <unistd.h>

    typedef int elemType;

    typedef struct _DCLink{
      struct _DCLink *prev;
      struct _DCLink *next;
      elemType data;
    }DCLink;

    //设计双向循环链表的接口
    //创建链表节点
    DCLink *create_node(elemType data);
    //创建链表
    DCLink *create_dclink();
    //插入数据
    bool insert_dclink(DCLink *head,elemType data);
    bool insert_dclink_tail(DCLink *head,elemType data);
    //删除数据
    bool delete_dclink(DCLink *head,elemType data);
    //查找
    DCLink *local_dclink(DCLink *head,elemType data);
    //显示
    void display_dclink(DCLink *head);
    #endif
    dclink.c

    #include "dclink.h"

    //创建链表节点
    DCLink *create_node(elemType data)
    {
      DCLink *node = malloc(sizeof(DCLink));
      //初始化
      node->data = data;
      node->prev node->next = node;
      return node;
    }

    //创建链表
    DCLink *create_dclink()
    {
      return DCLink *create_node(0);
    }

    //插入数据  头插法
    bool insert_dclink(DCLink *head,elemType data)
    {
      if(head == NULL)return false;
      
      //创建一个新的节点
      DCLink *node = create_node(data);
      node->next = head->next;
      node->prev = head;
      head->next->prev = node;
      head->next = node;
      return true;
    }

    //尾插法
    bool insert_dclink_tail(DCLink *head,elemType data)
    {
      head = head->precv;
      insert_dclink(head,data);
    }

    //删除数据
    bool delete_dclink(DCLink *head,elemType data)
    {
      DCLink *node = local_dclink(head,data);
      if(node == NULL)return false;
      
      node->prev->next = node->next;
      node->next->prev = node->prev;
      free(node);
      return true;
    }

    //查找
    DCLink *local_dclink(DCLink *head,elemType data)
    {
      if(head == NULL)return NULL;
      //记录头结点用于判断结束循环
      DCLink *p = head->next;

      while(p != head0
      {
        if(p->data == data)return p;
        p = p->next;  
      }
      return NULL;
    }

    //显示
    void display_dclink(DCLink *head)
    {
      if(head == NULL)return;
      //记录头结点用于判断结束循环
      DCLink *p = head->next;
      
      while(p != head0
      {
        printf("%d",p->data);
        p = p->next;
      }
      printf(" ");
    }
    #include "dclink.h"
    
    int main()
    {
        //创建节点
        DCLink head = create_node(0);
        
        insert_dclink(head,12);
        
        display_dclink(head);
        
        return 0;
    }

    内核循环链表(原理图)

    设计一个结构L1/L2

    struct list_head{
        struct list_head *next;
        struct list_head *prev;
    };

    设计一个结构体S1/S2

    struct Student{
        int age;
        struct list_head list;
    };
     

     内核链表太难了,我也不是很会,就不写了。有哪里写错请指出,谢谢。

  • 相关阅读:
    优达学城数据分析师纳米学位——知识点总结1
    优达学城数据分析师纳米学位——第二课 jupyter notebook的使用
    优达学城数据分析师纳米学位——第一课总结
    产品经理学习笔记- 猿题库运营面试准备
    EXCEL 2010学习笔记—— 动态图表
    EXCEL 2010学习笔记 —— VLOOKUP函数 嵌套 MATCH 函数
    最长上升子序列模板
    不要62
    划分树简单介绍
    母函数基本应用
  • 原文地址:https://www.cnblogs.com/smallqizhang/p/12394814.html
Copyright © 2020-2023  润新知