mirror of
https://github.com/kangjianwei/Data-Structure.git
synced 2026-02-06 16:31:59 +08:00
110 lines
2.8 KiB
C
110 lines
2.8 KiB
C
#include <stdio.h>
|
||
#include "Array.h"//**▲05 数组和广义表**//
|
||
|
||
// 数组输出函数的内部实现
|
||
static void Print(Array A, int dim, int index[]) {
|
||
int i;
|
||
int start;
|
||
|
||
if(dim == A.dim) {
|
||
start = 0;
|
||
|
||
// 计算本次遍历的起始元素位置
|
||
for(i = 0; i < dim - 1; i++) {
|
||
start += index[i] * A.constants[i];
|
||
}
|
||
|
||
// 遍历最后一个维度内的元素
|
||
for(i = 0; i < A.bounds[dim - 1]; i++) {
|
||
printf("%d ", A.base[start + i]);
|
||
}
|
||
} else {
|
||
|
||
for(i = 0; i < A.bounds[dim - 1]; i++) {
|
||
printf("<");
|
||
|
||
// 索引轮转
|
||
index[dim - 1] = (index[dim - 1] + 1 + A.bounds[dim - 1]) % A.bounds[dim - 1];
|
||
|
||
Print(A, dim + 1, index);
|
||
|
||
printf(">");
|
||
}
|
||
}
|
||
}
|
||
|
||
// 按行依次输出数组中内容
|
||
static void ArrayPrint(Array A) {
|
||
int i;
|
||
int* index;
|
||
|
||
// 在遍历数组元素时,记录每个元素的索引(只记录前dim-1维)
|
||
index = (int*) malloc((A.dim - 1) * sizeof(int));
|
||
for(i = 0; i < A.dim - 1; i++) {
|
||
index[i] = -1;
|
||
}
|
||
|
||
Print(A, 1, index);
|
||
|
||
printf("\n");
|
||
}
|
||
|
||
|
||
/* 以三维数组为例测试 */
|
||
int main(int argc, char** argv) {
|
||
Array A;
|
||
|
||
printf("████████ 函数 InitArray (以三维数组为例)\n");
|
||
{
|
||
printf("█ 初始化一个维度为<2,3,4>的三维数组 A ...\n");
|
||
InitArray(&A, 3, 2, 3, 4);
|
||
}
|
||
PressEnterToContinue(debug);
|
||
|
||
|
||
printf("████████ 函数 Assign \n");
|
||
{
|
||
int i, j, k;
|
||
ElemType e = 0;
|
||
|
||
for(i = 0; i < A.bounds[0]; i++) {
|
||
for(j = 0; j < A.bounds[1]; j++) {
|
||
for(k = 0; k < A.bounds[2]; k++) {
|
||
printf("█ 赋值:A[%d][%d][%d] = %d\n", i, j, k, ++e);
|
||
Assign(&A, e, i, j, k);
|
||
}
|
||
}
|
||
}
|
||
printf("█ A = ");
|
||
ArrayPrint(A);
|
||
}
|
||
PressEnterToContinue(debug);
|
||
|
||
|
||
printf("████████ 函数 Value \n");
|
||
{
|
||
ElemType x;
|
||
|
||
printf("█ 获取 A 中下标为 (1,1,1) 的元素的值,Locate 用于求出 A[1][1][1] 的相对位置...\n");
|
||
Value(A, &x, 1, 1, 1);
|
||
printf("█ A[1][1][1] = %d\n", x);
|
||
}
|
||
PressEnterToContinue(debug);
|
||
|
||
|
||
printf("████████ 函数 DestroyArray \n");
|
||
{
|
||
printf("█ 销毁 A 前:");
|
||
A.dim != 0 ? printf(" A 存在!\n") : printf(" A 不存在!!\n");
|
||
|
||
DestroyArray(&A);
|
||
|
||
printf("█ 销毁 A 后:");
|
||
A.dim != 0 ? printf(" A 存在!\n") : printf(" A 不存在!!\n");
|
||
}
|
||
PressEnterToContinue(debug);
|
||
|
||
|
||
return 0;
|
||
}
|