一維線性表如何構建多維陣列

2021-10-22 15:20:29 字數 3612 閱讀 9108

下面是一維、二維、三維的現實狀態,人類的想象力有限,高於思維的很難找到現實,但是對於計算機來說,可以表示任意維度的陣列

一維

長度為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 第乙個域是陣...