下面是用C语言实现一个简单的链表代码,适合C语言入门的小伙伴可以参考学习,通过这些代码可以对C语言链表有个很直观的理解,代码中还存在很多的瑕疵,比如添加和删除节点中没有进行处理超过本身链接节点数的添加,还有指针的处理还有改善的空间等等,还有链表十分简单的就只能从链表头向下找节点,属于单向链表。可以进行扩展作成一个双向链表。
#include <stdio.h> #include <stdlib.h> typedef struct linked_list //链表节点数据结构体
{ int date; //数据 void *next; //用来存储下个链表节点的地址 }link; void insert_link(link
*link_list, int data); //在链表结尾添加链表节点 void delete_link(link *link_list);
//在链表结尾删除链表节点 void add_link(link *link_list, int date, int n); //在链表的n节点 添加链表节点
void reduce_link(link *link_list, int n);//在链表的n节点 删除某个链表节点 int main() { int i
= 0; link linked_head; //链表的头地址 link *replace_link ; //用于作为打印输出的链表指针
linked_head.date = 0; //链表头初始化 linked_head.next = (void *)NULL;
insert_link(&linked_head, 20); //链表添加节点 (在链表尾添加) insert_link(&linked_head, 30);
insert_link(&linked_head, 40); insert_link(&linked_head, 50);
insert_link(&linked_head, 60); insert_link(&linked_head, 70); replace_link =
&linked_head; printf("\n"); //打印链表的数据 do { replace_link = replace_link->next;
printf("function link%d = %d\n", i++, replace_link->date);
}while(replace_link->next != NULL); delete_link(&linked_head); //链表删除节点( 在链尾删除)
replace_link = &linked_head; printf("\n"); //打印链表的数据 do { replace_link =
replace_link->next; printf("function link%d = %d\n", i++, replace_link->date);
}while(replace_link->next != NULL); add_link(&linked_head, 100, 1);
//在链表某个节点添加链表节点 replace_link = &linked_head; printf("\n");//打印链表的数据 do {
replace_link = replace_link->next; printf("function link%d = %d\n", i++,
replace_link->date); }while(replace_link->next != NULL);
reduce_link(&linked_head, 3); //在链表某个节点删除链表节点 replace_link = &linked_head;
printf("\n");//打印链表的数据 do { replace_link = replace_link->next; printf("function
link%d = %d\n", i++, replace_link->date); }while(replace_link->next != NULL);
return 0; } /*在链表结尾添加链表节点 */ void insert_link(link *link_list , int data) {
link *replace_link = link_list; while(replace_link->next != NULL) //判断是否到链表结尾 {
replace_link = replace_link->next; } /* * 向系统申请一个大小为 link结构体大小内存 * 用来作为新的链表节点
*/ replace_link->next = malloc(sizeof(link)); replace_link =
replace_link->next; replace_link->date = data; replace_link->next = NULL; }
/*在链表结尾删除链表节点 */ void delete_link(link *link_list) { link *replace_link =
link_list; link *clean_link = link_list; while(replace_link->next != NULL) {
clean_link = replace_link; replace_link = replace_link->next; }
clean_link->next = (void *)NULL; free(replace_link); //释放链表节点内存 } /* 在链表的n节点
添加链表节点 */ void add_link(link *link_list, int date, int n) { int i; link
*replace_link = link_list; link *add_link; for(i = 0; i < n; i++) //循环到链表的第N个节点
{ replace_link = replace_link->next; } add_link = replace_link->next;
replace_link->next = malloc(sizeof(link)); replace_link = replace_link->next;
replace_link->date = date; replace_link->next = add_link; } /* 在在链表的n节点
删除某个链表节点 */ void reduce_link(link *link_list, int n) { int i; link
*replace_link = link_list; link *reduce_link; for(i = 0; i < n; i++) {
reduce_link = replace_link; replace_link = replace_link->next; }
reduce_link->next = replace_link->next; free(replace_link); }
代码运行结果

技术
©2019-2020 Toolsou All rights reserved,
[数据结构]八大排序算法(C语言)总结G1垃圾收集器面试题Android中使用微信H5支付时支付结果刷新问题32-jdbc工具类大学里要参加竞赛吗?都有哪些竞赛可以参加?震惊!!C++居然可以发出声音!C语言之链表入门(超详解)Java实现一个疫情人数管理系统如何用python实现斐波那契数列的前100个MyBatis循环Map(高级用法)