数据结构之单链表概述 此为基本
必要 硬件知识物理地址形成 基地址+偏移地址
请回顾数组和指针部分知识
数组的在内存中存储状态 是连续的 其下标即为地址的位置 比如说数组a[10],那么他就个10个存储单元在内存中,是连续的,编号集合{0,1,2,3,4,5,6,7,8,9} 对数组的引用就是 a[0] a[1] a[2].........a[10] 此时 a[0]就是数组a的基地址 偏移量就是数组的下标。
这是数据组织的一种方式,用连续的地址形成一个 数据段
优点是:对数组元素的读写 比较快捷
缺点是:大小固定灵活性差,对数的删除 数的插入的修改动作方面差
不能充分利用内存空间
另一种组织形式 就是 用不连续的地址形成 一个数据段,也就是链表
链表的数据结构
特点
1.数据部分是由自己根据实际需要进行自定义的
2.除数据部分外,必须有一个存放 下一个数据存放位置的 地址指针,为引用下一个数据做准备。也就是书上说的 *next 指针。可以在数据结构中定义多个指针。这也是 双链表 循环链表 十字链表 树 图 等等 数据结构 演化出来的基本
关于链表的操作部分
1.创建
也就是开辟一个节点,衔接节点,节点的初始化 分为三步完成的 其中心是 next指针 指向问题,其目的是 由一个 节点 能够找出下一个节点位置
p1->next=p2 这个就是这个目的
2.修改特点条件的数据
读取节点,比较特定条件 二个过程
读取节点
while(p->next!=NULL)
{
p=p->next;
}
这个是基本的结构,读取了节点信息 用来做什么 就可以在这个循环体 加入你要完成的动作了 也就是特定条件的满足
特定条件的修改 分 插入 删除 等等
1.插入
要插入,就要能确定插入点。 就要得找出满足插入的条件,这个是写程序的第一个步奏 抽象出条件判定
通过上面说的读取节点 步奏 比对条件,找出节点后 就是插入动作 对于单链表来说 插入点只能是某某元素之后,具体原因自己动脑经
p2插入在p1之后
其基本代码
p2->next=p1->next 其目的是 让 p2的下一个节点是p3
p1->next=p2
2.删除部分
其实现过程为,查找待删除元素过程中 记录下正在条件比对节点p2的上一个节点信息p1 找到要删除节点P2后
现在 p1是已知的
基本代码为
p1->next=p2->next
接着就是free点p2
链表的相关属性
表头 head
表尾 next=null
表长 节点的个数
这个链表的属性 可以单独 建立一个数据 予以保存。保存属性项 表头 表长
说白了
链表 是 数组的动态表现
数组 是 链表的静态组织
不管是链表和数组 都是 一个指针的问题,是一类的问题
个人观点,老师是个活物,书是个死物,自己是主宰,不管是活物还是死物,自己主宰了,自己才算是个活物
当然计算机是老大它说的算,这个得诚服
以上为个人学习方法,也是从书本模仿别人的思维而来的。希望能给各位带来一些学习方面的经验
[ 本帖最后由 zhu224039 于 2012-9-27 10:55 编辑 ]