写给初学数据结构的同学之(线性表(顺序表,链表))
2012-07-20 16:11
323 查看
昨天的贴了一些双链表的基本操作(实现代码),对于一些上过课,知道了一些基本概念的同学,我相信还是有一点小小的帮助的。但是,这样的话,对于那些基本概念读不了解的童鞋,我觉得我的那些实现代码就会有点肯跌了~~~
所以,这次,我会从基本概念开始说,但是我还是会以代码为主,因为我觉得,基本概念知道的再多,也不急会几行代码~~~~~~~~~~~~~~~
进入正题:
线性表:
好吧,肯跌了,我还真的说不出它的定义,但我从它名字,我会知道,它是线性的(好像废话),说的专业点就是:
除第一个元素外,其他每一个元素有一个且仅有一个直接前驱;
除最后一个元素外其他每一个元素有一个且仅有一个直接后继。
这就是线性表的基本特征了。
那顺序表和链表有是什么呢?
顺序表和链表都是线性表。
首先说下顺序表:其实很简单,就是像数组一样,数据存放在连续的存储空间中。
用数组就能很方便的实现这种结构。
所以,因为储存结构的顺序与逻辑结构的顺序完全一致,其最大优点就是可以方便地随机存取表中任一个结点。
就像数组可以直接用下表来对数组进行操作。
但是,这一个又有一个很大的缺点:既然储存结构的顺序与逻辑结构的顺序完全一致,那么,当我们想在中间插入或者在中间删除一个数据的时候,我们就要将该位置以后的所有数据都向后移,或者向前移。效率就有点低了吧。还有一个问题:当我们定义一个数组的什么时候,比如:int str
;N是一个给定的数,也就是说,我要给他分配一块固定的空间,那么,当我们不知道要多少空间的时候,我们有可能会让费空间,或者空间不够用。
这样就要说到链表了,它是线性表的链接存储表示可不连续地分布在内存中任何的位置。
链表(单链表,双链表,(循环,带头))
我这篇博客就说说单链表了~~~~~
1.单链表结点:
本来不打算说的,后来想想,还是写上去,只想推荐使用typedef
2.单链表的create,insert,remove,sort都不说了
3.我只想说下单链表的转置(很多公司面试题都会问这个):
这个应该还是很重要的,能完全熟练掌控最好,不能的话就背下来呗,反正也不长。
最后,还是 多画画图,对学数据结构太有用了。
还有,说好的,以代号为住的,结果~~~~~~~~~~~~
所以,这次,我会从基本概念开始说,但是我还是会以代码为主,因为我觉得,基本概念知道的再多,也不急会几行代码~~~~~~~~~~~~~~~
进入正题:
线性表:
好吧,肯跌了,我还真的说不出它的定义,但我从它名字,我会知道,它是线性的(好像废话),说的专业点就是:
除第一个元素外,其他每一个元素有一个且仅有一个直接前驱;
除最后一个元素外其他每一个元素有一个且仅有一个直接后继。
这就是线性表的基本特征了。
那顺序表和链表有是什么呢?
顺序表和链表都是线性表。
首先说下顺序表:其实很简单,就是像数组一样,数据存放在连续的存储空间中。
用数组就能很方便的实现这种结构。
所以,因为储存结构的顺序与逻辑结构的顺序完全一致,其最大优点就是可以方便地随机存取表中任一个结点。
就像数组可以直接用下表来对数组进行操作。
但是,这一个又有一个很大的缺点:既然储存结构的顺序与逻辑结构的顺序完全一致,那么,当我们想在中间插入或者在中间删除一个数据的时候,我们就要将该位置以后的所有数据都向后移,或者向前移。效率就有点低了吧。还有一个问题:当我们定义一个数组的什么时候,比如:int str
;N是一个给定的数,也就是说,我要给他分配一块固定的空间,那么,当我们不知道要多少空间的时候,我们有可能会让费空间,或者空间不够用。
这样就要说到链表了,它是线性表的链接存储表示可不连续地分布在内存中任何的位置。
链表(单链表,双链表,(循环,带头))
我这篇博客就说说单链表了~~~~~
1.单链表结点:
typedef int NodeData; typedef struct node { NodeData data; struct node *next; }NODE;
本来不打算说的,后来想想,还是写上去,只想推荐使用typedef
2.单链表的create,insert,remove,sort都不说了
3.我只想说下单链表的转置(很多公司面试题都会问这个):
NODE * myreverse(NODE *head) { if(head == NULL ||head->next == NULL) { return head; } else { NODE *front = NULL; NODE *q = head; while(q != NULL) { NODE *ne = NULL; ne = q->next; /*记录下一个节点*/ q->next = front; /*q指向q的前驱节点*/ front = q; /*这时候q->next的前驱节点就是q了*/ q = ne; /*q = q->next*/ } return front; } }
这个应该还是很重要的,能完全熟练掌控最好,不能的话就背下来呗,反正也不长。
最后,还是 多画画图,对学数据结构太有用了。
还有,说好的,以代号为住的,结果~~~~~~~~~~~~
相关文章推荐
- 数据结构-线性表(顺序表与链表的基本知识 以及ArrayList 源码分析)
- php数据结构之顺序链表与链式线性表示例
- 写给初学数据结构的同学之(循环双链表基本操作,创建,插入,删除,排序)
- 数据结构之线性表之顺序表和链表(通过数据结构角度深入理解arrayList和linkedList的特性)
- 第六周--数据结构【线性表(二)链表】项目之顺序栈
- 数据结构之线性结构(顺序表和链表的比较)【五】
- 数据结构学习笔记1-线性表(顺序表,单链表)
- C# 数据结构 线性表(顺序表 链表 IList 数组)
- 数据结构 学习笔记(二):线性结构:线性表(顺序表,链表,广义表,多重链表)
- 初学数据结构-单链表初探的一些兴奋点
- 数据结构之线性结构的离散存储(单链表)
- 数据结构—线性表的顺序表示与实现
- 数据结构学习笔记 --- 线性表 (顺序表)
- PAT数据结构_02-线性结构1 两个有序链表序列的合并 (15分)
- 数据结构【线性表(二)链表】项目之合并有序表
- 数据结构学习笔记 --- 线性表 (单链表)
- 数据结构 线性表的顺序存储
- PHP数据结构之三 线性表中的单链表的PHP实现
- <<C#版数据结构>>之--线性表的链式存储(单链表)
- 数据结构之线性结构---栈 顺序储存