程式設計和資料結構基礎知識

2021-08-20 08:48:44 字數 2207 閱讀 4645

1、記憶體分割槽

由程式設計師手動分配和釋放;若程式設計師不釋放,程式結束時由系統釋放。

分配:malloc(c語言),new(c++)

釋放:free(c語言),delete(c++)

分配方式類似資料結構中的鍊錶。

棧 由編譯器自動分配和釋放。

存放函式的引數值、區域性變數的值等。

操作方式類似資料結構中的棧。

全域性儲存區(靜態儲存區)

存放全域性變數和靜態變數。

包括data段(全域性初始化區)和bss段(全域性未初始化區)。其中,在程式執行之前bss段自動清0。

文字常量區

程式**區

1、陣列定義中的型別

陣列定義中型別不能是引用,即沒有引用陣列,這是因為引用是不能賦值的,而陣列中的元素必須可以被賦值。

雖然沒有引用陣列,但陣列可以有引用。

2、陣列的初始化

函式體內定義的內建型別陣列,元素無初始化(若只初始化部分元素,其後的元素此時也會被初始化為0);

不是內建型別的話,就呼叫預設建構函式。

3、c風格字串和字元陣列

字串必須要有null結束,』\0』。遇到』\0』後字串終止,所以不要有多個』\0』。

4、二維陣列

宣告和初始化(包括在函式宣告中)乙個二維陣列時,如果對二維陣列的所有元素都賦值,則第一維(行數)可以省略。但第二維和更高維不能省略。

在c++中二維陣列是按行優先儲存的。因此在做矩陣運算的時候,採用行優先讀取的演算法比較快。

5、逗號運算子

表示式的值分別結算,但整個表示式的值是最後乙個表示式的值。

1、指標的運算

指標與整數的加減(包括自增自減)

指向另外乙個指標。

float型別的指標加3,那麼這個3會根據float型別的大小(此例中為4)進行調整(相乘),這樣實際上加到指標上的整型值為12。

指標之間的比較

告訴你哪個指標指向陣列中更前或更後的元素。

2、指標陣列和陣列指標

的優先順序高於*

指標陣列:

int *a[10];

陣列裡面裝著指標,即指標陣列是乙個陣列。

陣列指標:

int (*p)[10];

還是乙個指標,不過指向整個陣列。

一維陣列的陣列名是乙個指標,二維陣列的陣列名是乙個陣列指標。

但陣列名是乙個常量,不可以進行賦值操作,而陣列指標可以。

3、字串、陣列、指標

指標指向字串

char *p="hello"; //並不是把整個字串裝入指標變數,而是把存放該字串的首位址裝入指標變數。

p[0]='x'; //錯誤!!

指標指向陣列

int ia=;

int *ip=ia; //指標ip指向的是陣列ia的首元素

ia[4]=9; //將末尾元素8修改為9。還可以*(ia+4)=9; ip[4]=9; *(ip+4)=9;

ip=ip+1; //指向陣列ia的第二個元素

4、sizeof(指標、陣列名)

陣列名作為函式形參時,可理解為乙個指標,其內容也可以被修改。

其餘時候,陣列名是乙個常量,不可以對陣列名進行賦值操作。

char

str[10]; //sizeof(str)==10

test(char

str[10])

查詢子字串,然後返回第一次出現的位置

int index(const

char* str, const

char* substr)

else

}if(jreturn -1;

else retrun str+i-strlen(substr);

}

資料結構基礎知識

時間複雜度和空間複雜度 同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。乙個演算法的評價主要從時間複雜度和空間複雜度來考慮。1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測...

資料結構基礎知識

一種資料的邏輯結根據需要可以表示成多種儲存結構,常用的儲存結構有順序儲存 鏈結儲存 索引儲存等,採用不同的資料結構,其資料處理的效率是不同的。線性表是一種常用的資料結構。在實際應用中,線性表都是以棧 佇列 字串 陣列等特殊線性表的形式來使用的。線性表是一種線性結構。線性表有順序儲存結構和鏈式儲存結構...

資料結構基礎知識

簡單的說,資料結構是一門研究非數值計算的程式設計問題中計算機的操作物件以及它們之間的關係和操作等的學科。描述一類非數值計算問題的數學模型不再是數學方程,而是諸如表 樹和圖之類的資料結構。資料結構 的研究不僅涉及到計算機硬體 特別是編碼理論 儲存裝置和訪問方法等 的研究範圍,而且和計算機軟體的研究有著...