C語言 陣列 列優先 實現

2021-09-06 12:34:21 字數 3065 閱讀 6577

c語言陣列結構列優先順序儲存的實現 (gcc編譯)。

從行優先轉換為列優先儲存方式, 與行優先相比, 不同之處在於改變了陣列維界基址的先後順序, 從而改變了映像函式常量基址。

1/**

2* @brief c語言 陣列 列優先 實現

3* @author wid

4* @date 2013-11-025*

67*/8

9 #include 10 #include 11 #include 12 #include 13

14#define ok 1

15#define error -1

1617

#define max_dim 8 //

/允許的最大陣列維數

1819 typedef int

elemtype;

2021 typedef struct

22array; ///

陣列結構

2829

///陣列方法宣告

30int initarray( array *parr, int ndim, ... ); ///

初始化陣列 parr

31void destroyarray( array *parr ); ///

銷毀陣列 parr

32int locate( array *parr, int ndim, va_list ap ); ///

定位下標指向的元素在陣列中的位置

33int assign( array *parr, elemtype *elm, ... ); ///

陣列賦值

34int value( array *parr, elemtype *elm, ... ); ///

陣列取值

3536

///陣列方法實現

3738/**

39* @brief 初始化陣列40*

41* @param parr 指向待初始化的陣列

42* @param ndim 陣列的維數

43* @param ... 陣列各維數的長度44*

45* @return 初始化成功返回ok, 否則返回error

46*/

47int initarray( array *parr, int

ndim, ... )

4873

va_end(ap);

7475

///初始化元素基址

76 parr->base = (elemtype *)malloc( nelemcount * sizeof

(elemtype) );

77if( !parr->base)78

return

error;

7980

///初始化函式映像常數基址

81 parr->constants = (int *)malloc( ndim * sizeof(int

) );

8283

///遞推求常量基址, 列優先

84 parr->constants[ndim-1] = 1;85

for( i = ndim -2 ; i >= 0; --i )

8689

90return

ok;91}92

93/**94

* @brief 銷毀陣列 parr95*

96* @param parr 指向待銷毀的陣列

97*/

98void destroyarray( array *parr )

99109

110/*

*111

* @brief 定位陣列下標指向的元素在陣列中的位置

112*

113* @param 指向的陣列

114* @param ... 陣列的下標

115*

116* @return 若下標合法, 返回下標在陣列中的位置, 否則返回 error

117*/

118int locate( array *parr, int

ndim, va_list ap )

119132

va_end(ap);

133134

return

npos;

135}

136137/**

138* @brief 陣列賦值

139*

140* @param parr 指向待賦值的陣列

141* @param elm 指向賦值元素

142* @param ndim 陣列維數

143* @param ... 陣列下標

144*

145* @param 賦值成功返回 ok, 否則返回 error

146*/

147int assign( array *parr, elemtype *elm, ... )

148157

158/*

*159

* @brief 陣列取值

160161

*/162

int value( array *parr, elemtype *elm, ... )

163173

174int

main()

175191

192int b = 0

;193

///取值測試

194for( i = 0; i < 2; ++i )

195for( m = 0; m < 3; ++m )

196for( n = 0; n < 5; ++n )

197201

202///

銷毀陣列

203 destroyarray( &arr );

204205

return0;

206 }

執行測試:

C語言行優先和列優先的問題深入分析

c語言行優先和列優先的問題深入分析 摘要本文主要 的是 行優先 原則和 列優先 原則的問題。1.背景 首先了解 行優先 和 列優先 的知識,這兩種方式在數學上的直觀描述如下,給定如下矩陣 根據行優先的原則,其排序方式為 根據列優先的原則,其排序方式為 2.計算機領域的應用 行列優先原則在計算機領域的...

(25) 列表優先於陣列

陣列是協變的 convariant 如果sub是super的子型別,那麼陣列型別sub就是super的子型別。object obs new long 1 obs 0 hhe 這是可以的 泛型卻是不可變的,list不是list的子型別。listlist new arraylist 編譯錯誤 list....

C語言快速實現優先佇列(排雷)

為了簡單起見,存放資料的結構使用陣列。組織序號 我們知道優先佇列,也叫大 小 頂堆 預設為二叉堆 堆是一棵完全二叉樹,但實際上我們使用陣列並通過組織序號便能夠表示它,這依賴於完全二叉樹的良好性質。為防止以後出錯或造成混亂,實現前一定要先確定好如何組織序號 建堆操作 以 i nd ex 0 index...