mirror of
https://github.com/kangjianwei/Data-Structure.git
synced 2026-08-18 01:10:14 +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;
|
|
}
|