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"); } }