链表中头结点存在的意义:
便于对链表进行操作
离散存储【链表】(我们搞底层的开发,类似于SUN公司的类)
定义:
n个节点离散分配
彼此通过指针相连
每个节点只有一个前驱节点,每个节点只有一个后续节点
首节点没有前驱节点,尾节点没有后续节点。
专业术语:
首节点:
第一个有效节点
尾节点:
最后一个有效节点
头节点:
头结点的数据类型和首节点的类型一样
没有存放有效数据,最最前面的,是在
首节点之前的,主要是为了方便对链表
的操作。
头指针:(指向头)
指向头节点的指针变量
尾指针:
指向尾节点的指针
(头结点有可能很大,占的内存可能大,假设我想造一个函数
输出所有链表的值,那你如果不用头指针类型做形参,那由于
不同链表的头节点不一样大小,这样就没办法找出形参)
确定一个链表需要几个参数:(或者说如果期望一个函数对链表进行操作
我们至少需要接收链表的那些信息???)
只需要一个参数:头指针,因为通过它我们可以推出
链表的所有信息。
(链表的程序最好一定要自己敲出来)
分类:
单链表
双链表:
每一个节点有两个指针域
循环链表
能通过任何一个节点找到其他所有的节点
非循环链表
(java中变成垃圾内存则会自动释放,但是C和C++则不会,所以要
手动释放,否则会引起内存泄露。delete等于free)
算法:
遍历
查找
清空
销毁
求长度
排序
删除节点
插入节点
算法:狭义的算法是与数据的存储方式密切相关
广义的算法是与数据的存储方式无关
泛型:(给你一种假象,只不过牛人从内部都弄好了)
利用某种技术达到的效果就是:不同的存储方式,执行的操作是一样的
算法的真正学法:很多算法你根本解决不了!!!!!!因为很多都属于
数学上的东西,所以我们把答案找出来,如果能看懂就
行,但是大部分人又看不懂,分三步,按照流程,语句,
试数。这个过程肯定会不断地出错,所以不断出错,不断
改错,这样反复敲很多次,才能有个提高。实在看不懂
就先背会。