数据结构---单向链表的实现(内含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  宁夏党性培训 www.ahganxun.cn * 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
",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 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值