表 学习笔记&&总结

来源:互联网 发布: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视频一起的。“数据结构与算法描述”这本书讲的内容比较细,比较深。有的地方看起来还比较吃力。所以只有先看视频,了解一个大概,再看书了解更深层次的东西。但是现在学习时间还不算长,加上放假和自学… 本身就挺浮躁的,学习效率不是很高。在知识的应用方面也有所欠缺。

原创粉丝点击