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...