下面是一維、二維、三維的現實狀態,人類的想象力有限,高於思維的很難找到現實,但是對於計算機來說,可以表示任意維度的陣列
一維
長度為12的一維資料
二維
第一維是長度為4(括號①內有多少元素),第二維是長度為3(括號②有多少個①括號),對應圖中的3行4列的二維陣列
三維
第一維是長度為4(括號①內有多少元素),第二維是長度為3(括號②有多少個①括號),第三維是長度為2(括號③有多少個②括號),對應圖中的3行4列2層的三維陣列
n維
如上,我們不停的迭代即可,通過上述過程,我們可以知道一維陣列可以表示任意維度的陣列
定義型別
typedef int elemtype;
typedef struct
array;
如何理解這四個引數,舉例說明
距離說明二維情況
核心**實現
array.h
#include "base.h"
#ifndef _array_h_
#define _array_h_
typedef int elemtype;
#define max_array_dim 8
typedef struct
array;
// 若維數dim和隨後的各維長度合法,則構造相應的陣列a,並返回ok
status initarray
(array &a,
int dim,..
.);// 銷毀陣列a
status destroyarray
(array &a)
;// a是n維陣列,e為元素變數,隨後是n個下標值。
// 若各下標不超界,則e賦值為所指定的a的元素值,並返回ok
status value
(elemtype &e, array a,..
.);// a是n維陣列,e為元素變數,隨後是n個下標值。
// 若下標不超界,則將e的值賦給所指定的a的元素,並返回ok
status assign
(array &a, elemtype e,..
.);#endif
array.cpp
#include "array.h"
#include
#include
#include
// 若維數dim和隨後的各維長度合法,則構造相應的陣列a,並返回ok
status initarray
(array &a,
int dim,..
.)a.dim = dim;
a.bounds =
(int*)
malloc
(dim *
sizeof
(int))
;if(!a.bounds)
// 總長度
int elemtotal =1;
va_list ap;
va_start
(ap, dim)
;for
(int i =
0; i < dim; i++
) elemtotal *= a.bounds[i];}
va_end
(ap)
;// 分配記憶體
a.base =
(elemtype *
)malloc
(dim *
sizeof
(elemtype));
if(!a.base)
// 陣列映像函式常量基址,其實就是ci,確切說的是幾個儲存單元
a.constants =
(int*)
malloc
(dim *
sizeof
(int))
;if(!a.constants)
a.constants[dim -1]
=1;for
(int i = dim -
2; i >=
0; i--
)return ok;
}// 銷毀陣列a
status destroyarray
(array &a)if(
!a.bounds)if(
!a.constants)
return ok;
}// 若ap指示的各下標值合法,則求出該元素在a中的相對位址off
status locate
(array a, va_list ap,
int&off)
off += a.constants[i]
* ind;
}return ok;
}// a是n維陣列,e為元素變數,隨後是n個下標值。
// 若各下標不超界,則e賦值為所指定的a的元素值,並返回ok
status value
(elemtype &e, array a,..
.)e =
*(a.base + offset)
;va_end
(ap)
;return ok;
}// a是n維陣列,e為元素變數,隨後是n個下標值。
// 若下標不超界,則將e的值賦給所指定的a的元素,並返回ok
status assign
(array &a, elemtype e,..
.)*(a.base + offset)
= e;
va_end
(temp)
;return ok;
}
測試類
#include
#include "array.h"
// 四維演示
intmain()
}}}int
* p = a.base;
for(
int i =
0; i <
12; i++
)printf
("\n");
elemtype e =1;
value
(e, a,1,
1,1,
0);printf
("(1, 1, 1, 0) = %d\n"
, e)
;return0;
}
線性表和陣列操作 一
在乙個一維陣列中將所有的元素迴圈左移p 0 思想 ab ba,a 1b 1 ba 1 include void reverse int a,int b,int r 10 對給定陣列的特定範圍進行逆置 void main reverse 0,3,r 逆置前一部分 reverse 4,9,r 逆置後一部...
線性表 陣列描述
ifndef arraylist h define arraylist h include includetemplateclass arraylist templatearraylist arraylist int initcapacity arraylength initcapacity ele...
線性表 陣列實現
include include includeusing namespace std define ms a memset a,0,sizeof a define maxlength 100 線性表陣列實現,定義乙個具有兩個域結構體,陣列下標為0的地方不存放元素,可以使位置i對應整數i 第乙個域是陣...