目录

一:静态存储和动态存储

二:存储类别

三:malloc函数

四: free函数

五:内存初始化函数memset

六:calloc函数

七:realloc函数

八:线性表

九:链式存储结构

十:线性表的基本操作

十一:链表的创建和链接

十二:链表的遍历

十三:链表的插入

十四:链表的删除

十五:链表实际应用


一:静态存储和动态存储

变量从变量值存在的时间(即生存期)角度分:静态存储方式和动态存储方式

静态:在编译时确定了固定的内存地址与内存大小,如:函数里的static局部变量、全局变量等

动态:由程序控制,运行时主动性的向系统申请所需大小的内存段,并且每次分配到的内存地址不固定

在动态存储区存放一下数据:

1、函数形式参数

2、自动变量(未加static声明)

3、函数调用时的现场保护和返回地址

二:存储类别

三:malloc函数

malloc函数 如下

malloc函数示例

四: free函数

free函数 如下

free函数示例

五:内存初始化函数memset

memset函数 如下

memset函数示例

#include <stdio.h>
#include <string.h>
int main( )
{ char buffer[] = "This is a test of the memset function"; printf( "Before: %s\n", buffer ); memset( buffer, 0, 4 ); printf( "After: %s\n", buffer ); return 0;
}

六:calloc函数

calloc函数 如下

calloc函数示例

#include <stdio.h>
#include <stdlib.h>
void main() {float *calloc1;int i;calloc1 = (float *) calloc(3, sizeof(float));if(calloc1!=NULL) {for(i = 0 ; i < 3 ; i++)printf("\ncalloc1[%d]holds%05.5f",  i,calloc1[i]);free(calloc1);}else { printf("Not enough memory \n");   }
}

七:realloc函数

realloc函数 如下

realloc函数示例

#include<stdio.h>
#include <stdlib.h>
int main(){int *ptr , i;ptr = (int *)calloc(5, sizeof(int));if(ptr ==NULL) return 1;*ptr = 1;*(ptr+1) = 2;ptr[2] = 4;ptr[3] = 8;ptr[4] = 16;ptr = (int *)realloc(ptr,7*sizeof(int));if(ptr == NULL) return 1;ptr[5] = 32; ptr[6] = 64;for(i = 0;i < 7;i++){printf(“ptr[%d]:%d\n", i, ptr[i]);}realloc(ptr,0); /* free(ptr);*/return 0;
}

八:线性表

线性表 如下

顺序存储结构以及特点

九:链式存储结构

链式存储结构 如下

单链表 如下

单链表状态图 如下

单链表节点数据结构定义 如下

单链表初始化 如下

循环单链表状态图 如下

双向链表状态图 如下

双向循环链表状态图 如下

十:线性表的基本操作

初始化

插入

删除

遍历(即访问每一个元素,如打印所有信息)

查找

排序

十一:链表的创建和链接

十二:链表的遍历

十三:链表的插入

1.插入链表头和链表尾

2.插入中间的位置 

十四:链表的删除

十五:链表实际应用

普通链表设计

通用链表设计

通用链表基本操作

初始化链表

void *List_Init(void *data)

添加链表节点

void List_Add(struct list *head,void *data)

获取链表节点个数

int List_Count(struct list *head)

获取链表某个节点(返回链表节点的data)

void *List_GetNode(struct list *head,int Index)

Index---链表节点编号,head---链表头节点

删除链表的某个节点

int List_Del(struct list *head,int Index)

释放链表

void List_Free(struct list *head)

通用链表初始化

void *List_Init(void *data)
{struct list * head;head = (struct list *)malloc(sizeof(struct list));head->data=data;head->next=NULL;return head;
}

通用链表添加节点到尾部

void List_Add(struct list *head,void *data)
{struct list *pNode,p1=head;pNode=(struct list *)malloc(sizeof(struct list ));while(p1->next != NULL ){   p1=p1->next; }   //遍历链表,找到最末尾的节点p1->next=pNode;pNode->data=data;pNode->next=NULL;
}

通用链表获取链表节点个数

int  LIST_Count(struct list * head)
{struct list * p1;int nCount = 0;p1=head->next;while(p1 != NULL){nCount++;p1=p1->next;}return nCount;
}

通用链表释放链表

void *List_Free(struct list *head)
{struct list *ptr=head;while(ptr!=NULL){ptr=ptr->next;free(head->data);//先释放数据存储的内存空间free(head);//再释放链表节点的内存空间head=ptr;}return head;
}

通用链表示例    

void test()
{struct list *head;struct staff *people1,*people2;//初始化链表head=List_Init(NULL);//头节点不存储数据,参数为NULLpeople1=(struct staff *)malloc(sizeof(struct staff));people2=(struct staff *)malloc(sizeof(struct staff));people1->iStaffID=1001;strcpy(people1->acName,"张三");strcpy(people1->acPasswd,"123456");people2->iStaffID=1002;strcpy(people2->acName,"李四");strcpy(people2->acPasswd,"123456");//添加链表节点List_Add(head,people1);List_Add(head,people2);//员工信息打印函数Staff_Print(head);
}
//员工信息打印函数
void Staff_Print(struct list *head)
{struct list *p1=head->next;struct staff *people1;while(p1 != NULL){ people1=p2->data;printf("%5d%10s%10s\n",people1->iStaffID,people1->acName,people1->acPasswd);p1=p1->next;}
}

【C语言】 链表 超详细解析相关推荐

  1. 一步一步教你从零开始写C语言链表(超详细)

    STM32 HAL开发完全指南 写文章 一步一步教你从零开始写C语言链表(超详细) 杨源鑫 嵌入式系统工程师.物联网创业合伙人,业务经理兼产品经理 285 人赞同了该文章 为什么要学习链表? 链表主要 ...

  2. Android技能树 — 网络小结(6)之 OkHttp超超超超超超超详细解析

    前言: 本文也做了一次标题党,哈哈,其实写的还是很水,各位原谅我O(∩_∩)O. 介于自己的网络方面知识烂的一塌糊涂,所以准备写相关网络的文章,但是考虑全部写在一篇太长了,所以分开写,希望大家能仔细看 ...

  3. 单片机数字钟(调时,调时闪烁,万年历,年月日)超详细解析

    2019/07/13 单片机数字钟(调时,调时闪烁,万年历,年月日)超详细解析 发表日期:2019/07/13 单片机开发板:巫妖王2.0, 使用同款开发板可直接上板测试 文档说明: 实现功能 : 一 ...

  4. 计算机网络之交换机的工作原理---超详细解析,谁都看得懂!!

    在了解交换机的工作原理之前,我们先要了解几个概念. 一.相关概念  1.OSI七层模型是哪七层? 自上而下分别是: 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 交换机工作在数据链路层, ...

  5. c r语言中rank函数,R语言rank函数详细解析

    R语言rank函数详细解析 发布于 2016-01-04 16:26:04 | 557 次阅读 | 评论: 0 | 来源: PHPERZ R 数据统计分析语言R是用于统计分析.绘图的语言和操作环境.R ...

  6. 三、Hive数据仓库应用之Hive数据操作语言(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7)

    Hive远程模式部署参考: 一.Hive数据仓库应用之Hive部署(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7) Hive数据定义语言 ...

  7. msp430流水灯c语言程序,超详细msp430示例程序汇编.doc

    超详细msp430示例程序汇编 一.基础_实验[10个] 1.入门试验:LED闪烁(1个) 2.时钟实验:设置MCLK.ACLK.SMCLK(1个) 3.低功耗实验:设置低功耗模式(1个) 4.IO端 ...

  8. 【智能算法】粒子群算法(Particle Swarm Optimization)超详细解析+入门代码实例讲解...

    喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 算法起源 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由E ...

  9. VUE 钩子函数超详细解析

    点击上方蓝色字体关注我吧 一起学习,一起进步,做积极的人! 前言 Vue 实例在被创建时,会经过一系列的初始化过程,初始化过程中会运行一些函数,叫做生命周期钩子函数,通过运用钩子函数,用户在可以在Vu ...

最新文章

  1. 水印第三版 ~ 变态水印(这次用Magick.NET来实现,附需求分析和源码)
  2. 【Flutter】侧拉导航栏实现 ( Drawer 组件 | PageView 组件 )
  3. NYOJ 648 数字1的数量
  4. C# 执行Cmd窗口中的命令 [复制文件实例]
  5. 数据库原理与应用(SQL Server)笔记 第三章 连接查询
  6. thymeleaf 判断checkbox是否选中_一日看尽长安花——复选框(CheckBox)数据清洗和统计的SAS实现...
  7. 海尔计算机类,海尔计算机类笔题
  8. 信息安全完全参考手册之安全设计原则(第四章)
  9. 程序架构探讨—005 应用服务器集群的伸缩性之反向代理负载均衡
  10. 为什么说java语言是支持跨平台的
  11. 面试笔记【自己总结】
  12. 经典机器学习系列(七)【聚类分析】
  13. 微软从 Engine Yard 手中收购容器平台 Deis
  14. Linux中shell脚本获取当前工作目录
  15. 如何更高效、更系统地彻底搞懂3D视觉?
  16. mac book usb 故障修复
  17. java报错symbol_java 报错cannot resolve symbol问题
  18. Lucas-Kanade算法
  19. 一幅长文细学华为MRS大数据开发(一)——大数据时代的挑战和机遇
  20. 计算机网络三大要素是,计算机网络安全的三大要素不包括?

热门文章

  1. 图像的叠加、混合、分离
  2. OPENCV手势动作识别-石头剪刀布
  3. HashCode计算方法
  4. MySQL导入中文乱码解决之道
  5. GPT-4来了!多模态大模型,除了能说会道,还能看图能考试
  6. 长风破浪会有时:单向链表、双向链表和循环链表图文解析
  7. c/s原生实现增删改查 在线点餐系统
  8. iOS 那些好用的三方库索引
  9. 网站安全配置Nginx防止网站被攻击
  10. python表示后面部分是注释_Python 注释(Python Comments)用法详解