您的位置:首页 > 理论基础 > 数据结构算法

第二天 之数据结构、链表的相关概念和操作

2012-07-14 23:04 381 查看
数据结构指的是数据元素之间存在的一种直接或间接的关系的集合,是一种数据关系,通常这种关系有离散的(没有固定的对应),线性的(一对一),树形的(一对多),网状的(多对多),数据结构其实就是数据+结构,也就是数据的集合+在这种数据集合上关系、结构的集合(有限集),我们常说的数据结构是种逻辑的结构,而在计算机上存储的却是物理结构,相对应的在计算机中就有:顺序存储结构(数组表示)和链式存储结构(结构体,要借用指针),两者是以数据是否在内存中以连续的空间存放为界限的

数据类型是一组数据的集合+对这组数据的操作权限

链表的建立过程其实就是动态的申请空间(通过malloc函数),动态的进行连接操作,把一个个结点连接起来,值得注意的是如果是单链表的话,记得把最后结点的指针域设置成NULL,如果是双向链表的话就把最后元素的next域置空NULL,如果是单向循环链表的话,就把最后一个结点的指针域指向第一个结点(或头结点),如果是双向循环链表的话,就把最后一个结点的next域指向第一个(或头结点)结点,而且第一个结点的prior域要指向最后一个结点;

链表的插入操作其实只不过是先通过查找算法找到结点的插入位置,然后注意结点的连续性,更要注重结点的连接代码的执行顺序,如在p结点之后插入结点s,应该是:

s->next=p->next;p->next=s;如两者顺序打反的话,则会是p->next=s;但s->next=p->next其实就是s本身,显然是不对的;双向链表也是如此,注意代码有顺序结构,注意它们彼此的执行顺序;

链表的删除操作其实和插入的大体上没什么很大的区别,只不过一个是增加链表的长度,一个是减少链表的长度,删除时也要注意链表的延续性;

链表的修改操作就更好了,只需把找到的结点的数据域进行修改即可,查询的话就更不用说了,遍历链表即可,注意表的长度,寻找的次数问题即可;

其实链表是种可以动态实现对数据内容进行存储的,链表的操作其实是对结构体structure的进一步练习。

二叉树的建立是以根节点为起点的,建立其左右结点,然后依次分别以左右结点为起点,重复上述的建立过程,遍历的过程也是如此,(先序遍历从根节点出发,中序遍历从左结点出发,然后根节点、右结点, 后序遍历左右中,遍历的过程都是从上往下,从左到右的)

好了,C和数据结构的复习,就到此了,明天开始C#,.NET,SQL Server之旅

我坚信:山再高,只要坚持不懈,一步一步地往上爬,终有一天会爬到山顶,书再难,只要持之以恒,一页一页地往下看,总有一天会全面看懂,编程再苦,只要永不言弃,一行一行代码地敲打,终有一天会学有所成。 ————————————我不自弃,谁能弃我!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: