复试前数据结构知识点复盘【第二章线性表之顺序表】

线性表:分为顺序表(初始化:静态分配或动态分配)、链表(单链表、循环链表、双链表、静态链表、)

顺序表的定义:

        用我们熟知的结构体定义,在定义中,有我们自己定义的数据类型的结构体,也有我们用新的数据类型定义的变量体现在我们的新的结构体中。(这段文字我觉得有问题,但是我稍微解释一下,看能不能理解)

        比如我现在要做一个表示图书表,用顺序表实现,首先我要先定义一本书的结构体,里面有char变量,有int变量,可以表示书的名字和价格,也就是做成一个新的数据类型,接下来,我要定义一个表的结构体,表里面有书和书的数量,也就是刚刚定义的新的数据类型的指针,和int变量。为什么是指针呢,因为我需要访问的是刚才创建的书这个结构体的地址,用来获得书名、价格之类的信息。我刚学的时候我好奇,我拿个指针有啥用,我现在定义之后怎么找...之类的等等问题,然后我在这里强调一点,定义是定义,初始化时初始化,我定义了不是说计算机里就有这个表了,只是会告诉计算机,我这个表结构长这样而已(如果这里都看不懂我说啥的话,估计是我表述能力不行,建议换一个人的文件看)(如果是没理解结构体和指针之类的话,可以去再看看相关的课)

顺序表的初始化:

        啥叫初始化,就是跟计算机说,我现在需要做出一个上述的表,但是这个表里没有数据。所以,要初始化,是不是得用函数?执行代码无非就是从main函数开始,然后疯狂的调用各类函数,函数执行完,最后return一个0,象征main函数结束,程序结束。所以我们定义一个初始化得函数,叫啥随便你,不会定义函数就去再补一下函数的知识。

        接下来我们定义一个初始化函数,既然要做一个表,我是不是该给我的定义变成一个实例,啥叫变成实例,就比如int,他就是一个数据类型,int a=1;此时此刻,我的a值就是一个实例。所以我们刚才定义的表结构给他实例化,注意静态分配和动态分配不一样,静态分配是直接给他实例化成一个数组,数组多大随你写,但是定死的大小,动态分配是给他实例化成一个数据块,用malloc函数,找别人的代码看一看就知道了。

顺序表的取值、查找、插入、删除:

        上面这几个就是对一个表的基操,之前不是把这个表定义成了一个数组的形式或者数据块的形式吗,然后我就可以利用这个表的实例化对象的点操作或者箭头操作通过指针去获取我想要的数据。

        插入操作要考虑,往哪里插?这个位置合不合法,如果表满了咋办?合不合法从初始化的表长那就可以看出来,如果表满了就分两种情况,第一,静态分配的情况,那就必须重新申请一个表长更长的表,然后把原来的数据全部搬过去,是不是特别麻烦,所以我喜欢用动态分配,嘿嘿嘿。第二,动态分配,我是不是利用malloc函数动态存储的数据,所以此时我就重新再用一次malloc函数动态分配,更改一下后面的表长就可以了。记得插入完成之后,表长要+1.(插入到中间,那必然涉及到数据元素的迁移)

        删除操作要考虑,删哪一个,位置合不合法,表空了咋办?合不合法从初始化的表长那就可以看出来,如果表空了,删锤子删,肯定删之前要判断一下咯。(如果删除中间的元素,也涉及到元素的迁移问题,表长要-1)

        mallo函数我多说一句,程序结束前一定要记得free,不然莫名被占一块空间,还不还给计算机,就像有人借你钱,不还你。所以记得主动free

时间复杂度:

        因为他是一个数组形式的,或者数据块形式的,所以知道下标很好查,但是不好插入和删除,因为都涉及到元素的移动,所以,我们用到顺序表的时候就是查询比较多的时候。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值