表 学习笔记&&总结
来源:互联网 发布:idc网站php源码 编辑:程序博客网 时间:2024/06/05 23:01
对久仰“数据结构”的大名,也趁着各种机会,开始自学数据结构。听到数据结构的名字,觉得听高大上的,也疑惑了很久什么是数据结构? 听说是没有官方的统一定义,但是根据各计算机书籍对其定义,数据结构与算法总是联系在一起的。
例:“数据结构(data structure)是计算机中存储、组织、数据的方式。通常情况夏,精心选择的数据结构可以带来最优效率的算法。” —-中文维基百科
虽然是初实数据结构,但是在学习了一段时间后,发现其实在学习C语言的时候就已经对数据结构有所涉及了,可见庞大的计算机领域,很多东西都是连贯相通的。我认为C语言中学过的链表,数组,都是数据结构的基础。
PART1 表
最熟悉的表,就是C语言中学习过的链表。
说到链表,就离不开结构体和指针。 我们将信息封装到结构体中,一部分是data数据域,另一部分是指针域,指向链表中的下一个结构体。表尾的指针指向NULL。链表的存储是非连续的,所以head指针的时刻保存至关重要,丢了head指针则相当于丢了整个链表,造成不可预料的后果。
相关链表的代码如下。
链表结构体
struct Node { ElementType data; struct Node *next; }
测试一个链表是否是空表
/*Return true if L is empty*/int IsEmpty(List L){ return L->next == NULL;}
测试当前位置是否是链表的末尾函数
/*Return true if P is the last position in list L*//*Parameter L is unused in this implementation*/int IsLast(Position P, List L){ return P -> next == NULL;}
Find例程
/*Return Position of X in L; NULL if not fund*/PositionFind(ElementType X, List L){ Position P; p = L -> next; while(p != NULL && p->Element != X) p = p->next; return P;}
链表插入例程
/*Insert (after legal position P)*//*Header implementation assumed*//*Parameter L is unused in this implementation*/void Insert(ElementType X, List L, Position P){ Position TmpCell; TmpCell = malloc( sizeof( struct Node ) ); if( TemCell == NULL) FatalError("out of space!!!"); TmpCell->Element = X; TmpCell->Next = P->next; P->next = TmpCell;}
删除表的正确方法
/*Correct DeleteList algorithm*/voidDeleteList( List L ){ Position P, Tmp; P = L->next; /*header assumed*/ L->next = NULL; while( p != NULL) { Tmp = P->next; free( p ); P = Tmp; } }
最直观的理解链表的方式是通过图解法。
在使用单向链表时最不方便的一点就是只能是前驱指向后继,在链表的删除时必须知道我们将要删除的结构体的前驱的位置,不然就会造成数据的丢失。双向链表就完美的解决了这个问题。
除此之外 还有循环链表
表的简单实现可由数组来完成
对表的所有操作都可以同坐使用数组来实现,但是因为数组的存储空间是连续的,对于插入和删除数据来讲,用数组非常之麻烦,耗时长。
对于一组确定数量,不常变动的数组,可以用数组来实现。
总结:
对于这部分的学习,我是看书 结合 MOOC视频一起的。“数据结构与算法描述”这本书讲的内容比较细,比较深。有的地方看起来还比较吃力。所以只有先看视频,了解一个大概,再看书了解更深层次的东西。但是现在学习时间还不算长,加上放假和自学… 本身就挺浮躁的,学习效率不是很高。在知识的应用方面也有所欠缺。
- 表 学习笔记&&总结
- echo2 学习笔记 总结
- 学习笔记总结
- jQuery学习笔记总结
- jvm学习笔记总结
- 笔记总结--学习JFreeChart
- php学习笔记总结
- Android学习笔记总结
- linux学习笔记--总结
- ADO_Net学习笔记---总结
- SQL 学习总结笔记
- DirectShow学习笔记总结
- linux学习笔记总结
- Unity3D学习笔记总结
- C++学习笔记&总结
- Linux学习笔记总结
- 学习总结笔记
- DirectShow学习笔记总结
- CSU-ACM2017暑期训练1-Debug与STL hdu1896-Stones
- Java复习-equals和hashcode
- Java实现Excel导入数据库,数据库中的数据导入到Excel
- hdu 1325 Is It A Tree?(并查集全都是坑)
- nginx 免安装包
- 表 学习笔记&&总结
- hdu-2795-Billboard(线段树)
- xxxxxxxxxxxx
- 利用python数据分析-读书笔记1
- CodeForces 831C : Jury Marks(set的使用)
- 解决butterknife添加依赖的时候报错
- python 通过xml获取测试节点和属性
- (一)蓝牙低功耗(BLE)基础教程--基于nRF5x系列SOC
- Shell中批量备份目录的一个小技巧