一、数据结构的概念:
我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能(比如查找某个元素,删除某个元素,对所有元素进行排序),而执行的相应操作,这个相应的操作也叫做算法。
数据结构 = 个体的存储 + 个体的关系存储
算法 = 对存储数据的操作
二、什么是线性结构?
简单来讲,线性结构就是把所有的结点用一根直线连接起来,它分为:连续存储(数组)和离散存储(链表),今天就来学一下连续存储数组的算法演示,下面来看一段代码:
#include <stdio.h> struct arr { int *pbase; //存储的是数组第一个元素的地址 int len; //数组所能容纳的最大元素的个数 int cnt; //当前数组有效元素的个数 }; void init_arr(struct arr array); int main(void) { struct arr ar; init_arr(ar); printf("%d ",ar.len); return 0; } void init_arr(struct arr array) { array.len = 99; }
运行结果如下:
程序说明:这里得到的结果跟我想像的结果有点不一样,我们原本是让len 的结果输出结果为99,但是这里显示的结果却为0,这是为什么呢?原因是这样的,因为在一开始之前len他就已经有一个垃圾值了(是任意一个数),但是我们上面通过一个函数来试图修改它的值,由于不知道他的具体地址在哪里,所以我们赋予它99这个值,只是修改函数里面这个局部变量的值,并没有修改到len的值,当这个函数被调用到主函数中,这个局部变量也就失去了它的作用了(也就是说对主函数中的变量修改起不到作用),所有要通过函数来修改主函数中的len,我们必须使用指针来操作:
#include <stdio.h> struct arr { int *pbase; int len; int cnt; }; void init_arr(struct arr *array); int main(void) { struct arr ar; init_arr(&ar); printf("%d ",ar.len); return 0; } void init_arr(struct arr *array) { (*array).len = 99; //(*array)=ar }
运行结果如下:
可以通过运行结果可以看出我们修改成功了。
#include <stdio.h> #include <malloc.h> #include <stdlib.h> struct arr { int *pbase; int len; int cnt; }; void init_arr(struct arr *array,int length); bool is_empty(struct arr *array); void show_arr(struct arr *array); int main(void) { struct arr ar; init_arr(&ar,6); is_empty(&ar); show_arr(&ar); printf("%d ",ar.len); return 0; } void init_arr(struct arr *array,int length) { array->pbase = (int *)malloc(sizeof(int )*length); if(NULL == array->pbase) { printf("the give is failure "); exit(-1); } else { array->len = length; array->cnt =0; } return; } bool is_empty(struct arr *array) { if(array->cnt == 0) { return true; } else return false; } void show_arr(struct arr *array) { int i=0; if(is_empty(array)) { printf("the array is empyt "); } else { for(i=0;i<array->cnt;++i) { printf("%d",array->pbase[i]); } printf(" "); } }