NOIP-数据结构

数据结构在我们的日常编程和日常生活中无处不在,我们今天就来看看其中最简单也是最基本的一种数据结构——线性表。

线性表:就是以线性的方式组织和管理我们数据,换句话说就是将我们的数据一个一个的排起来。如果一个数据x排在另一个数据y的前面,我们称x是y的前驱,y是x的后继。这样我们就可以发现线性表的最基本的性质,除了第一个元素,每个元素都有且仅有一个前驱,除了最后一个元素,每个元素都有且仅有一个后继。

接下来我们来看一种基本的线性表的存储方式数组。

数组是在我们日常编程中使用的最多最广泛的存储线性表的方式,在c/c++中我们用type name[size]来定义一个数组,其中type是数组中存储的数据的类型,常见的类型有int ,float,double,long long,char等,name是数组的名字,当然我们也可以取一些非常文艺的名字,size是数组的大小。我们再来看看数组支持的操作。数组支持在常数的时间内对一个特定位置的数据进行读取、修改,但是他需要一个和数组大小相关的时间来进行一个对数据的插入或删除。

在c/c++中系统使用了连续的一段内存空间来存储我们的数组,并且利用一个指向这个内存地址的起始点的变量来保存这个数组,还支持各种不同形式的对数组的访问,比如下面这个程序我们都可以将a数组下标为3这个位置的数据修改为5。 

int a[100];

a[3] =5;

3[a] =5;

*(a+3) =5;

最后要提醒大家注意的是c和c++的数组的下标是从零开始,大家写程序的时候要注意不要访问越界哦。

接下来我们来看看另一种线性表的存储方式链表。

链表是一种存储线性表十分自然的方式,我们在已有的数据的基础上维护一些其他的信息来保存这个数据的前驱或者后继。比如我们维护一个指向这个数据存储地址的指针(也就是用一个变量保存要指向的数据在内存地址中的位置信息)。我们用这些指针将我们的数据串联起来就构成了链表。在c/c++中我们可以使用struct来实现链表的这种结构,比如下图中我们的data保存了我们要存的数据,next指向了我们这个数据的后继。

    

struct node 

{

    int data;

    node* next; 

};

对于这样的一个链表我们还需要存储一个链表的头,这样我们就能够找到这样的一个链表,并且沿着他的next指针访问整个链表了。

接下来我们看看链表支持的操作,它支持一个与访问位置有关的时间内访问一个指定的元素,但是只要我们访问到了这个元素,我们就能够在常数的时间内修改删除,或者在他的后面加入一个元素。最后提醒大家注意链表的最后一个元素的指针要赋值为空指针哦。

 

NOIP信息学视频地址

视频地址

链接:https://pan.baidu.com/s/1tHo1DFMaDuMZAemNH60dmw 
提取码:7jgr

posted @ 2020-10-16 09:36  tianli3151  阅读(167)  评论(0编辑  收藏  举报