資料結構 陣列,字串

2021-09-11 22:26:16 字數 3990 閱讀 1634

陣列、字串是兩種最基本的資料結構,使用連續記憶體分別存數字和字元,並按照順序儲存

str[indexofnew --

]= str[indexoforiginal]

;

str[indexofnew]

= str[indexoforiginal]

;indexofnew --

;

bool duplicate

(int numbers,

int length,

int* duplication)..

.int numbers;

bool validinput =

duplicate

(numbers, lengthnumbers,

&duplication)

;

2.一維陣列,形參為同資料型別指標,實參傳陣列名

void

test

(const

char

* testname,

int* numbers,

int length,

int* duplications,

int duplength)..

.int numbers=

;test

("test1"

, numbers,

sizeof

(numbers)

/sizeof

(int

), duplications,

sizeof

(duplications)

/sizeof

(int))

;

3.二維陣列,形參為同資料型別指標,實參傳將陣列名強制型別轉化成的同類指標

void

test

(char

* testname,

int* matrix,

int rows,

int columns,

int number, bool expected)..

.int matrix[

4]=,

,,};

test

("test1",(

int*

)matrix,4,

4,7, true)

;

4.二維陣列,形參為給定第二維長度的二維陣列,實參為陣列名

void

test

(int matrix[

4],int rows,

int cols,

int num)..

.int matrix[

4]=,

,,};

test

(matrix,4,

4,7)

;

5.二維陣列,形參為指向陣列的指標(陣列指標)並給出陣列長度,實參為陣列名

void

test

(int

(*matrix)[4

],int rows,

int cols,

int num)

// 陣列指標..

.int matrix[

4]=,

,,};

test

(matrix,4,

4,7)

;

6.二維陣列,形參為指標的指標,實參必須為指標陣列(元素為指標的陣列)。在函式中使用傳參過來的二維陣列(指標)進行陣列取值的時候不能使用(array[ i ][ j ])這種形式來取值。應該將二維陣列看成乙個一維陣列,使用array[i * j + j]這種形式來進行取值。

void

test

(int

**matrix,

int rows,

int cols,

int num)..

.int matrix[

4]=,

,,};

int* array[4]

;// 指標陣列

array[0]

= matrix[0]

;array[1]

= matrix[1]

;array[2]

= matrix[2]

;array[4]

= matrix[4]

;test

(array,4,

4,7)

;

附:

陣列指標(也稱行指標)

定義 int (*p)[n];

()優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型資料的長度。

如要將二維陣列賦給一指標,應這樣賦值:

int a[3][4];

int (*p)[4]; //該語句是定義乙個陣列指標,指向含4個元素的一維陣列。

p=a; //將該二維陣列的首位址賦給p,也就是a[0]或&a[0][0]

p++; //該語句執行過後,也就是p=p+1;p跨過行a[0]指向了行a[1]

所以陣列指標也稱指向一維陣列的指標,亦稱行指標。

指標陣列

定義 int p[n];

優先順序高,先與p結合成為乙個陣列,再由int說明這是乙個整型指標陣列,它有n個指標型別的陣列元素。這裡執行p+1時,則p指向下乙個陣列元素,這樣賦值是錯誤的:p=a;因為p是個不可知的表示,只存在p[0]、p[1]、p[2]…p[n-1],而且它們分別是指標變數可以用來存放變數位址。但可以這樣 p=a; 這裡p表示指標陣列第乙個元素的值,a的首位址的值。

如要將二維陣列賦給一指標陣列:

int *p[3];

int a[3][4];

p++; //該語句表示p陣列指向下乙個陣列元素。注:此陣列每乙個元素都是乙個指標

for(i=0;i<3;i++)

p[i]=a[i]

這裡int *p[3] 表示乙個一維陣列內存放著三個指標變數,分別是p[0]、p[1]、p[2]

所以要分別賦值。

劍指offer 面試題3(p39)陣列中重複的數字

tips 用下標定位元素,利用這一特性可交換資料到與下標對應的位置;與二分查詢結合考察,熟悉二分查詢的寫法。

int start =1;

// attention

int end = length -1;

while

(end >= start)

劍指offer 面試題4(p44)二維陣列中的查詢

c/c++中每個字串以字元』\0』作為結尾,因此字串有乙個額外字元,不留神容易造成字串越界。

c/c++把常量字串放到乙個單獨的記憶體區域,當幾個指標賦值給相同的常量字串時,他們實際上會指向相同的記憶體位址。例如,

char

* st3 =

"hello world"

;char

* st4 =

"hello world"

;

st3和st4中所存位址相同。並且在上述字元指標的char*複製字串常量時,不可用指標st3,st4改變該常量的值。

char

* testname;

printf

("%s begins: "

, testname)

;// 而不是 *testname

字元陣列、字元指標的字串會有要考慮記憶體釋放是否足夠、字串

長度等的問題,因此使用時可以考慮使用stl庫中的string

資料結構 字串

1 字串 include string.h include stdio.h include stdlib.h include math.h include time.h define ok 1 define error 0 define true 1 define false 0 define ma...

資料結構 字串

字串是由0個或多個字元構成的序列,可記為s a1a2a3 an 其中ai可以是字母,也可是數字或者其他字元,零個字元的串稱為空串。而字串的順序結構就是用簡單的char型別陣列來儲存沒什麼好說的,下面介紹一下bf演算法與kmp演算法 bf演算法就是比較平常的雙重迴圈,如果匹配成功打斷迴圈,否則子串的比...

資料結構 字串

靜態陣列實現 順序儲存 串的順序儲存 define maxlen 255 預定義最大串長為255 typedef struct 靜態陣列實現 順序儲存 sstring 動態陣列實現 堆分配儲存 typedef struct 動態陣列實現 堆分配儲存 hstring 初始化void inithstri...