数据结构初识笔记(C语言)[1]

-1.复杂度

 

--空间复杂度

空间复杂度也是一个数学表达式,是对一个算法在运行过程中 临时占用存储空间大小的量度
空间复杂度不是程序占用了多少 bytes 的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。
空间复杂度计算规则基本跟实践复杂度类似,也使用 O 渐进表示法
注意: 函数运行时所需要的栈空间 ( 存储参数、局部变量、一些寄存器信息等 ) 在编译期间已经确定好了,因
此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定。
ep:斐波那契函数的复杂度
函数从上到下递归调用,每次返回的每一个调用两个,所以调用次数为公比为2的等比数列。
调用函数栈帧先从左边开始递归深度为n调用完返回,开辟过的空间可以重复重新使用。
ep:

法一:

法二:

法三(最优):

--2.顺序表(数组):

注意:

1.realloc需要的返回类型是(void*)参数(强转所需类型),单位是字节,获得传参的字节数量就要用个数(newcapacity)*单个的字节(sizeof(...));

2.进行数据插入删除时都需要检查数组是否满,是否空,所以可以单独设计一块搞一个检查函数

//用一个已用空间和拥有空间两个对比来判断数组空间使用情况,当其为空时size==capacity,满的时候也是

注意尾删等地方的越界问题:

ps:1.assert只能在debug版本下使用,release版本下忽略(只检查简单错误)

2.平常写函数时要习惯性进行防御式检查

3。删除跟插入顺序不一样,删除是少数据然后后面填前面,插入是多数据前面挪后面

4.此时如果还是用end倒着找尽管是往前面填数据,后面填前面就把前面的覆盖了,但是插入时数据前面挪后面肯定要先把后面的数据往后挪,然后再用前面的覆盖原来的位置。

这样访问最后一个数据没有覆盖因为begin+1可能越界;也可以把begin置为当前位置的下一个(其实这几个最后一个数据都没有覆盖)都是处理到size-1

5.有了这俩头插头删尾插尾删都可以复用;

6.scanf如果读到文件最后或者输入错误,会返回eof循环时要加判断,重新输入时要清缓冲区,否则scanf读不到值,赋值的变量没有更新新的值,会进入死循环。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值