• 数据结构单向链表的实现(内含c代码,已调试,可用)


    10 个数据结构:数组链表队列散列表二叉树跳表Trie 树

    本节先对单向链表的学习(主要是使用代码进行实现

    1:单向链表的理论介绍:

    链表原理如下图所示:

      上面展示的是一个单链表的存储原理图,简单易懂,head为头节点,他不存放任何的数据,只是充当一个指向链表中真正存放数据的第一个节点的作用,而每个节点中都有一个next引用,指向下一个节点,就这样一节一节往下面记录,直到最后一个节点,其中的next指向null。

     链表有很多种,比如单链表,双链表等等。我们就对单链表进行学习,其他的懂了原理其实是一样的。

    (上面的理论也是粘贴复制的因为有太多的理论介绍了。)

    2:单向链表的代码实现

     1 #include <stdio.h>
     2 #include <malloc.h>
     3 #include <string.h>
     4 
     5 #define false 0
     6 #define true  1
     7 //单向链表
     8 typedef struct node{
     9     struct node * next;
    10     int data;
    11 }my_signal_list;
    12 
    13 //单向链表初始化
    14 my_signal_list* init_signal_list(void)
    15 {
    16     //定义一个链表头指针
    17     my_signal_list* list_head = NULL;
    18 
    19     //申请链表堆空间
    20     list_head = (my_signal_list*)malloc(sizeof(my_signal_list));
    21     if(NULL == list_head)
    22     {
    23         return NULL;
    24     }
    25 
    26     memset(list_head, 0, sizeof(my_signal_list));
    27     return list_head;
    28 }
    29 
    30 //单向链表的插入(此处采用尾插法)
    31 bool insert_signal_list(my_signal_list* list_head, int insert_data)
    32 {
    33     my_signal_list* tmp_list_ptr = NULL;
    34     my_signal_list * insert_list_data = NULL;
    35 
    36     if(NULL == list_head)
    37     {
    38         return false;
    39     }
    40     tmp_list_ptr = list_head;
    41 
    42     while(NULL != tmp_list_ptr->next)
    43     {
    44         //获取最后一个节点
    45         tmp_list_ptr = tmp_list_ptr->next;
    46     }
    47 
    48     //申请链表节点堆空间
    49     insert_list_data = (my_signal_list*)malloc(sizeof(my_signal_list));
    50     if(NULL == list_head)
    51     {
    52         return false;
    53     }
    54 
    55     insert_list_data->data = insert_data;
    56     insert_list_data->next = NULL;
    57     tmp_list_ptr->next = insert_list_data;
    58     return true;
    59 }
    60 
    61 //单向链表的插入(此处采用尾插法)
    62 void print_signal_list(my_signal_list* list_head)
    63 {
    64     //申请一个临时的head指针。避免对head指针的直接操作,丢失头指针的位置
    65     my_signal_list* tmp_list_ptr = NULL;
    66 
    67     tmp_list_ptr = list_head;
    68     while(NULL != tmp_list_ptr && NULL != tmp_list_ptr->next)
    69     {
    70         //获取下一个节点
    71         tmp_list_ptr = tmp_list_ptr->next;
    72         printf("%d\n",tmp_list_ptr->data);
    73     }
    74     return;
    75 }
    76 int main(void)
    77 {
    78     //使用
    79     my_signal_list * list_head = init_signal_list();
    80     if(NULL != list_head)
    81     {
    82         insert_signal_list(list_head,2);
    83         insert_signal_list(list_head,4);
    84         insert_signal_list(list_head,5);
    85         insert_signal_list(list_head,6);
    86     }
    87     print_signal_list(list_head);
    88     return 0;
    89 }
  • 相关阅读:
    Linear Regression Example
    三角函数画图(Python)
    机器学习算法笔记系列之深入理解主成分分析PCA-原理篇
    Boosted Trees 介绍
    Jacobian矩阵和Hessian矩阵
    使用插件pagehelper在mybatis中实现分页查询
    git常用操作
    Python远程视频监控
    FPGA选型
    英文Datasheet没那么难读
  • 原文地址:https://www.cnblogs.com/Jlord/p/15979732.html
Copyright © 2020-2023  润新知