1、数据结构的概念:算法
咱们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能(好比查找某个元素,删除某个元素,对全部元素进行排序),而执行的相应操做,这个相应的操做也叫作算法。数组
数据结构 = 个体的存储 + 个体的关系存储数据结构
算法 = 对存储数据的操做函数
2、什么是线性结构?spa
简单来说,线性结构就是把全部的结点用一根直线链接起来,它分为:连续存储(数组)和离散存储(链表),今天就来学一下连续存储数组的算法演示,下面来看一段代码:指针
#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\n",ar.len); return 0; } void init_arr(struct arr array) { array.len = 99; }
运行结果以下:code
程序说明:这里获得的结果跟我想像的结果有点不同,咱们本来是让len 的结果输出结果为99,可是这里显示的结果却为0,这是为何呢?缘由是这样的,由于在一开始以前len他就已经有一个垃圾值了(是任意一个数),可是咱们上面经过一个函数来试图修改它的值,因为不知道他的具体地址在哪里,因此咱们赋予它99这个值,只是修改函数里面这个局部变量的值,并无修改到len的值,当这个函数被调用到主函数中,这个局部变量也就失去了它的做用了(也就是说对主函数中的变量修改起不到做用),全部要经过函数来修改主函数中的len,咱们必须使用指针来操做:blog
#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\n",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\n",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\n"); 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\n"); } else { for(i=0;i<array->cnt;++i) { printf("%d",array->pbase[i]); } printf("\n"); } }