C语言数据结构学习笔记(1)

如果你学习过java,会发现里面有很多像array,list,String等等,这些不外乎是存储一类相同数数据的结构,如:

string
a
b
......
z
int
1
2
3
.....
n

数据结构是元素和元素关系的集合,如上面的例子string就是a,b,c...的集合,其中包括了a,b,c....的关系,什么关系:c是在b后面,a又在b后面,这关系干什么用的,那就关系到了算法,算法简单点说就是对存储数据的操作,如初始化,追加,删除,排序,插入等等。就像是数据结构是:饭;而算法就是做做饭的方法,你是要蒸着吃,还是要炖着吃。饭不一样,做法不一样,有清蒸鱼,红烧鱼,糖醋鱼。。。。也就是说数据结构不一样,算法也不一样。如数组遍历可以用a[1],a[2],a[3]..a[i],而链表就不行了,链表要找到第3个元素,就要知道第2个元素,要找到第2个元素,就要知道第1个元素,比较麻烦。C语言数据结构学习笔记(1)_第1张图片

为什么要这样,多麻烦,用一种结构不行了???那你炒菜要用高压锅吗,你蒸米要用电磁炉吗??需求不一样的。之所以有些这么多结构供你选则,原因只有一个:它很适合我!!!!

上面的图只是直观的表面:在内存中是怎么实现的。那就要介绍一下malloc函数:动态申请内存(menery  allocable)英语真的不怎么好!!用法如下int *p = (int *)malloc(100),我介绍一下什么意思,高手绕道!!俺都是菜鸟!

内存访问是以字节为单位,访问只能是字节的倍数如,1个字节,2个字节,100个字节。。那上面的malloc中的100就是100个字节。这就明白了,原来malloc就是给内存要东西去了,啥东西。空间啊。。要多大,要100。好,给你。好了,有空间了,那就放东西吧,随便放反正这里我说的算,整数,小数,字符,统统可以。malloc函数会返回一个类型的首地址,先不说啥类型,看原函数定义void *malloc(unsigned int num_bytes);  void没类型,那可不行,系统不知道你存啥所以就没自作主张,那你自己知道存啥,所以要申明(强制准换),转化有啥用,malloc会返回一个类型,返回类型的元由你定,看图找真象:

C语言数据结构学习笔记(1)_第2张图片

int类型malloc返回了4个字节,char返回了1个字节。那这有啥用??返回类型是你访问的单元。。。。别慌。。刚才说了内存访问的单元是字节,你访问的单元由你定,如int(1,2,3。。。)。你可能不去访问字节,而去访问其他的。就是这意思。你访问以什么为单位就定什么类型。下面另一个准备知识点:指针。你怕它,我也怕。。。。。先别怕,亲。。看图:

C语言数据结构学习笔记(1)_第3张图片


一小块指向一大块,我用1元买了价值100的东西,换算不划算,自己说。就是你用一小块内存当一大块内存用(不严谨,但可以这么认为),为什么要那么麻烦,我有的是内存!!亲,你有100G还是200G,你如果玩过网游,这回发现电脑忒卡,没内存了。一个大型程序一定要处理好内存的分配问题。对你以后用帮助的。箭头就是指针,具体c语言实现看下面int * p = {数组地址},int a[5] = {1,2,3,4,5},p = a;上面意思是p(小块)指向a(大块);

上面的是数组,原来说了还有链表,看最上头的链表,一个箭头,又一个箭头,就是找朋友,怎么着,用箭头。补充一点:链表的内存分配是不连续的,这一块,那一块。。最后用箭头连再了一起。

前提准备就这么多,算法在具体实践中介绍。希望对你有所帮助。以上均为自己理解,错误在所难免,也不严谨,敬请指正!!!






你可能感兴趣的:(数据结构,算法,链表,数组,C语言学习笔记)