所謂動態資料結構,是指在執行時刻才能確定所需記憶體空間大小的資料結構,動態資料結構所使用的的記憶體稱為動態記憶體。動態記憶體的使用有一定的危險,必須遵守一定的規則。動態申請的內存在不需要時必須及時釋放,如果不斷地申請動態記憶體而不加以釋放,將導致記憶體資源的枯竭。
c++處理動態記憶體提供了一對操作符new和delete。new操作符用於動態申請記憶體,而delete操作符則用來釋放動態申請的記憶體。如果物件中為指標型屬性申請了動態記憶體,則必須在析構函式中加以釋放。
在c++中,動態記憶體和指標變數是密切相關的,將指標變數和c++中的new和delete操作符結合起來,用來申請和釋放動態記憶體。
在程式執行過程中,當確定了資料所需記憶體空間的大小後,可以用new操作符請求系統分配足夠的記憶體以存放該資料,並返回指向新申請到的記憶體區域的指標,如果申請不成功(這通常是因為記憶體空間不夠),則返回空指標null。
例如,下面的程式段中,new以資料型別t為引數,為型別為t的變數申請記憶體,返回得到記憶體位址。
t*p; //定義p為指向t的指標
p=new t;//p為型別t資料的記憶體位址
又如,當p1和p2分別為指向int和long型別資料的指標時,操作符new可以為它們分別申請相應的記憶體空間並將其他位址分別賦給p1和p2。
int*p1; //定義p1為指向int(2位元組大小)的指標
long*p2; //定義p2為指向long(4位元組大小)的指標
p1=new int; //p1指向記憶體中的乙個整數
p2=new long;//p2指向記憶體中的乙個長整數
預設情況下,new申請的記憶體中的內容沒有初值,如果需要初值,必須使用操作符new的引數形式:
p=new t(value);
如下述操作:
p1=new int(100);
為整數申請記憶體並對其賦初值100,p1指向乙個初值為100的整數。在c++中,不僅可以動態申請簡單資料型別的記憶體空間,也可以申請複雜的資料型別,如動態陣列的申請。程式中需要申請動態陣列時,可用帶方括號「[ ]」的new操作符為陣列申請記憶體。例如:
t*p; 定義p為指向t的指標
p=new t[n]; 為型別為t的n元陣列申請記憶體
將p指向陣列的第乙個元素。和簡單資料型別不同,用這種方法申請陣列時不能指定初始值。當申請的動態記憶體不再需要時,使用delete操作符加以釋放。需要注意的是,delete的使用形式必須和new相匹配。例如:
t*p1,*p2; //p1和p2均為指向型別t的指標
p1=new t; //p1指向乙個型別為t的資料
p2=new t[n]; //p2指向乙個型別為t的n元陣列
操作符delete使用這些指標來釋放為它們申請的記憶體,但在釋放陣列時,必須與「[ ]」運算子結合使用:
delete p1;//釋放p1指向的簡單變數空間
delete [ ] p2; //釋放p2指向的陣列變數空間
資料結構 動態陣列
int a newint 2 3 定義乙個兩行雜湊的陣列 靜態陣列 int b newint 2 定義行數,列數可變 陣列的儲存 int a newint 10 一維陣列 int a newint 2 3 二維陣列 int a newint 2 3,4 三維陣列 陣列儲存的特點靜態陣列 int a ...
C 動態資料結構(四)
1.在鍊錶中間插入資料 如果按照結點資料排序結果應在鍊錶中間插入新結點,則將 待插入結點p的指標域指向下一結點,而前一結點的指標域指向 待插入的結點。2.在鍊錶的尾部插入資料 如果在鍊錶的末尾插入新結點,則將鍊錶的最後乙個結點的指標指向待插入結點p,而待插入結點p的指標域賦值為null。return...
資料結構 動態順序表
pragma once include include includetypedef int datatype typedef struct seqlist seqlist,psseqlist void seqlistinit psseqlist ps,int capacity 初始化鍊錶 void...