C->数据结构->链式结构
来源:互联网 发布:java最好的培训 编辑:程序博客网 时间:2024/05/17 22:46
本人是个新手,写写笔记。
如果那里有错误或者语言不妥的地方。
请给予斧正!
0x01简介
数据都会存放在彼此的独立的空间中
每一个空间,我们叫做节点
提问,我们该如何找到每一个节点呐?
每个节点都需要使用一个指针来记录下一个数据的位置
0x02小结
每一个节点需要两个必备的条件
1-> 存放节点的数据
2->记录下一个节点地址的指针
如果是最后一个节点,指针就是NULL空地址
大体就是这样的
0x03实现链式结构(创建/删除)
我们一般使用结构体来当做节点使用
6 typedef struct { 7 int value; //存入节点的数据 8 struct neob *p_value; //指向下一个节点的地址指针 9 }neob;//节点名称小技巧:
在创建一个链式结构的时候,最好在头节点添加一个空节点,有利于操作
neob f1;//创建一个空的头节点,名叫f1neob *p_value=&f1;//这里就是将指针指向节点
创建:
我们建立一个新的函数
代码:
95 void add_head(int value){//先把要存放的数据拿过来 96 noob* p_temp=p_head;//创建一个新的指针,指向头节点 97 noob* p_newneob=(neob *)malloc(sizeof(neob));//我们要创建就要在堆中申请一个新的结构体的内存空间 98 p_newneob->p_value=p_temp->p_value;//新申请的节点中的指针要指向当前节点的下一个节点的地址 99 p_newneob->value=value;//设置新的节点中的数据100 p_head->p_value=p_newneob;//将上一个节点的指针指向新创建的节点101 }
删除:
例如:
我们要删除中间的节点
条件:
要记住删除节点中指针指向的地址
再删除之前,就要复制被删除节点中的指针地址
之后,再将复制下来的指针地址赋值给前面的节点中的指针
在某种意义上讲,我们找不到第二个节点,也就是删除掉了
在删除的时候,要检测到被删除节点是否是最后一个节点
小知识:
这种删除方法很常见
就比如说,在格式化硬盘之后为什么还可以找到之前的数据
格式化并不是直接删除数据而是修改数据地址
所以在数据恢复中,要避免数据的重复擦写
删除节点的代码实例:
int dely(){neob *p_temp=p_f1->p_value;if(p_temp->p_value){//如果这个节点的指针不为空,就是说这个节点不是最后的节点while(p_temp->p_value->p_value){p_temp=p_temp->p_value;//向下寻找}free(p_temp->value);//释放p_temp->p_value=NULL;//设置空地址return 1;//返回1,表示删除成功}else{return 0;//失败}}
0x04插入节点
依然看下这个图
void gnew(int value){//要接收新节点的新数据 neob *p_temp=p_value;//获取头节点的地址 neob *p_neob=(neob* )malloc(sizeof(neob));//从堆中获取一个节点的空间,再将首地址交给p_neob指针 p_neob->value=value;//设置节点中的数据 p_neob->p_value=NULL;//不知道这个节点的前一个节点的指针是什么,所以先设为空地址 //要寻找,链式结构的最后一个节点的指针,然后再将指针指向p_neob->p_value while(p_temp->p_value){//从头节点开始,一次寻找每个节点中地址是否为空,如果,找到空地址之后就代表是链式结构的最后一个节点就可以结束 p_temp=p_temp->p_value;//依次向后推 } p_temp->p_value=p_neob;//找到最后一个节点,并挂上刚刚申请的节点地址}
阅读全文
0 0
- C->数据结构->链式结构
- 数据结构 链式存储结构
- 数据结构--链式存储结构
- 数据结构C语言实现之二叉树链式结构
- C语言数据结构-2.线性表之链式存储结构
- 链式队列(数据结构C#)
- 数据结构的链式存储结构
- 数据结构的链式存储结构
- 数据结构 链式 栈 c实现
- 数据结构-二叉树 链式 c
- 数据结构--链式栈(C语言)
- 链式栈 C语言数据结构
- Stack-c单向链式结构
- C语言 队列的链式结构的实现与表示 数据结构 队列的实现与表示
- [C++]数据结构实验03:链式结构线性表的基本操作
- [C++]数据结构:线性表的公式化描述和链式描述的结构特点与基本操作
- 数据结构——线性表的链式结构(C语言)
- C语言数据结构-3.栈的顺序及链式存储结构
- Win7配置CUDA并搭建基于Theano框架的GPU加速环境
- 用python机智的打印水仙花数
- 计划的关键点
- final和finally的区别
- 关于移动开发
- C->数据结构->链式结构
- MongoDB六(映射,限制和排序记录)
- 行驶证/驾驶证/身份证等证件识别技术
- Linux(Ubuntu16.0.4)下安装pycharm
- knockoutjs的foreach绑定应首先判断数组是否为空,否则会出错
- Java的重写与重载简析
- 数据结构 c语言 hash查找 链地址法实现
- B. The Festive Evening(Codeforces Round #426 (Div. 2) B)
- 感知机