動態陣列C語言
阿新 • • 發佈:2021-02-07
題外話:寒假1月12號就開始了,在這之前學校組織了兩週的實訓,做了一個實驗室裝置管理系統,並且還用到了通訊功能。一直想把實驗成果發到csdn,但是最近沉迷在遊戲中(原神),所以一直沒有來得及,只是隔幾天學一會資料結構,抽空把實訓成果上傳一下,記錄一下自己的軌跡。
接下來是正題
動態陣列
動態陣列與c語言自帶的陣列有什麼區別
陣列它涉及到一種存取結構:順序儲存。它是有序的,索引值從0開始的,元素的實際位置和索引相差一位。
下面我將從兩個方面說明他們之間的區別:
- 儲存型別:c自帶的陣列儲存型別非常單一,只能是c語言提供的基礎型別。而動態陣列則是可以儲存任意型別的資料。
- 存取量 :c自帶的陣列一旦定義後,它的長度是不能再改變的。而動態陣列是可以改變的。
動態陣列的設計思路
動態陣列使我們自己根據需要進行設計的,因此我們會使用到結構體型別。下面我將做一個簡單地動態int型陣列。
typedef struct List{
int *head;
int length;
int size;
}List;
提示:typedef 關鍵字可以將struct List賦予一個新名稱 :List(也就是結尾分號前的字母
這裡定義了一個List結構體型別的資料,他有頭指標、長度和大小這三個變數。大小表示了這個變數可以存取的最大元素數量。
我們定義了一個List變數之後,我們並不能直接使用它進行元素的儲存,因為head指標只是指向了一個int型的變數區,需要用malloc函式為其分配記憶體空間。
動態陣列的設計
List getList(int size){
/*
*這個方法旨在實現List的初始化工作,旨在給List型別的head變數分配一個空間
*/
List l;
l.size = size;
l.head = (int*)malloc(l.size*sizeof(int));//為List分配記憶體空間
if(!l.head){
printf("初始化失敗");
exit(0);
}
l.length = 0;//空表長度為0
l.size = size;
return l;
}
使用動態陣列:
int main(){
printf("Hello World!\n");
List l = getList(3);
l.head[0] = 12;
l.length++;
l.head[1] = 13;
l.length++;
l.head[2] = 34;
l.length++;//這裡為了記錄陣列長度
for(int i=0;i<l.length;i++){
printf("順序表的第%d個元素是:%d\n",i+1,l.head[i]);
}
printf("l的長度是:%d,size是:%d",l.length,l.size);
return 0;
}
執行結果:
完整程式碼:
#include <stdio.h>
#include<stdlib.h>//為使用malloc函式
typedef struct List{
int *head;
int length;
int size;
}List;
List getList(int size){
/*
*這個方法旨在實現List的初始化工作,旨在給List型別的head變數分配一個空間
*/
List l;
l.size = size;
l.head = (int*)malloc(l.size*sizeof(int));//為List分配記憶體空間
if(!l.head){
//
printf("初始化失敗");
exit(0);
}
l.length = 0;//空表長度為0
l.size = size;
return l;
}
int main(){
printf("Hello World!\n");
List l = getList(3);
l.head[0] = 12;
l.length++;
l.head[1] = 13;
l.length++;
l.head[2] = 34;
l.length++;//這裡為了記錄陣列長度
for(int i=0;i<l.length;i++){
printf("順序表的第%d個元素是:%d\n",i+1,l.head[i]);
}
printf("l的長度是:%d,size是:%d",l.length,l.size);
return 0;
}