資料結構簡單C

2021-10-07 17:35:19 字數 3325 閱讀 8429

1.陣列//一堆相同型別資料的集合

//一定是在記憶體上佔據一塊連續的空間 

1.1一維資料

.1陣列的定義

資料型別 陣列名[大小];

資料型別 陣列名[大小] = ;//初始化

int arr[10];//陣列名是陣列首位址

.2陣列的賦值

陣列名[下標];//取到陣列某個元素

陣列下標範圍0 ~ n-1

arr[4] = 10;

.3陣列的初始化//定義的同時賦值

①完全初始化

int arr[10] = ;

char arr[5] = ;

char name = "zhangsan";

②部分初始化

int arr[10] = ;

③指定元素初始化

int arr[10] =

.4字元陣列

①陣列清零

int arr[10] = {};

bzero(引數1,引數2);

//對指定陣列進行清零操作

引數1:要清零的陣列

引數2:要清零的位元組數長度

例子:bzero(arr,40);

memset(引數1,引數2,引數3);

引數1:要修改的陣列

引數2:要修改的值

引數3:要修改的位元組數長度

char name[10];

memset(name,0,10);

memset(name,'1',10);//只用做字元陣列

strcpy(引數1,引數2)

strcmp(引數1,引數2);//"abcd" "abef"

//大於返回正數,小於返回負數

strcat(引數1,引數2);

1.2二維陣列//也是在記憶體上連續

int arr[行][列];//int arr[3][4];

0 1 2 3

4 5 6 7//arr[1][1]

8 9 0 1

二維陣列初始化:

int arr[3][4] = };

2.指標變數//變數的作用:儲存 運算

給每乙個小塊乙個編號(位址)

指標變數:專門用來儲存位址,能存放位址的只有指標

.1指標型別//有多少個資料型別,就有多少個指標型別

資料型別 變數名;

資料型別 變數名 = 值;

char ch = 'a';

int a = 100;

char* p = &ch;//char *p;

p = &a;//肯定可以儲存,但是取值會出問題,*p取乙個位元組

printf("%c\n",*p);

printf("%p\n",p);

printf("%p\n",&a);

.2指標的大小

//指標就是用來儲存位址的,所以位址多大,指標就多大

32位機指標4個位元組,64位指標8個位元組//指標大小只和機器位數有關

任意型別的指標都可以儲存任意型別的位址,但是不建議這樣做,因為取值會出問題

char *p1;//*p1取乙個位元組

short *p2;//*p2取兩個位元組

int *p3;

double *p4;

.3萬能指標//空型別的指標

void *p;//可以儲存/賦值任意指標,不報警告

//不可以對萬能指標取值

.4空指標野指標

野指標:指向不明確的指標

int *p;//出不出錯都正常

空指標:指向為null的指標

int *p = null;//#define null (void *)0x00

//對空指標取值一定出錯

例子:/* int a;

int *p = &a;//0x8eff455

*/ int *p = 0x12345678;//行,但是會報警告

p = (void *)0x12345678;//消除警告

printf("%d\n",*p);//不行

3.陣列和指標的關係

3.1一維陣列和指標的關係

int arr[5] = ;//int *const arr;

int *p;//p = arr;p = &arr[0];

arr[0] arr[1]

*(p+0) *(p+1)

// p[0] p[1]

//一旦乙個指標指向乙個一維陣列,此時指標和陣列的使用就一模一樣

唯一區別:指標值可以變化,陣列名不可以改變

3.2二維陣列和指標的關係

指標陣列://是乙個陣列

int *arr[3] = ;//有十個元素,可以儲存十個位址

int buf[3][4];

0 1 2 3

4 5 6 7

8 9 0 1

arr[0] = &buf[0][0];//buf[0];

arr[1] = &buf[1][0];

arr[2] = &buf[2][0];

buf[1][1];//arr[1][1];*(*(arr+1)+1)

陣列指標://專門指向二維陣列

int buf[3][4];

0 1 2 3

4 5 6 7

8 9 0 1

int (*p)[4] = buf;//該指標+1,表示向後挪動4個int數

buf++;//p[1][1];

void fun(int (*p)[4])

void main()

4.構造型別:結構體

.1建立結構體

typedef struct passwd

pwd_t;//1.建立乙個新的資料型別

//2.定義結構體變數

pwd_t zs;//size_t

.2結構體訪問成員

pwd_t zs;

strcpy(zs.user,"張三");

strcpy(zs.pwd,"123456");

.3結構體陣列

pwd_t arr[10];

arr[0].user;

.4結構體指標(動態記憶體管理)

pwd_t *p;

棧:系統分配,系統釋放

堆:使用者申請,使用者釋放

malloc(要申請空間的位元組數大小);

//申請成功,返回新空間的位址;失敗返回null

//申請空間存放10個int數 malloc(4*10);

例子:p = malloc(sizeof(pwd_t));

strcpy(p->user,"張三");

資料結構(c語言) 簡單迷宮

迷宮 對於乙個用空格和 號組成的迷宮,如下 這是乙個10 10的迷宮。如果碰到 那個方向就走不通。大致演算法 遞迴 初始點為 1,1 優先向右探路,不通就向下,還不通的就向左,再不通就向上探路。棧每走一步,判斷是否走過,如果沒有,就把座標記錄到棧中。如果有,返回上一層遞迴。include stdio...

資料結構(C )簡單順序表

資料結構學過了模板之後就開始了線性表的學習,線性表又分為簡單的順序儲存和鏈式儲存兩種方式。兩種方法各有長短,根據不同的實際情況定義使用。是零個或多個具有相同型別的資料元素的有限序列。通常的線性表中有兩個元素,乙個是儲存的資料,另乙個是表資料的長度。線性表的順序儲存,是指用一維位址連續的儲存單元依次儲...

資料結構 簡單小結

資料結構 優點缺點 陣列插入快,知道下標可快速訪問 查詢慢,刪除慢,大小固定 有序陣列 比無序陣列查詢快 插入 刪除慢,大小固定 棧後進先出的方式訪問 訪問其他項很慢 佇列先進先出的方式訪問 訪問其他項很慢 鍊錶插入 刪除快 查詢慢二叉樹 插入 刪除 查詢都快 如果樹保持平衡 刪除演算法複雜 紅 黑...