数据结构与C 知识量:8 - 24 - 99
数组是一种线性逻辑结构,可以用来存储多个相同类型的数据元素。在C语言中,数组是通过连续的内存空间来存储数据元素的,其逻辑结构与线性表类似,可以通过下标来访问数组中的元素。
在C语言中,定义一个数组需要指定其数据类型和数组大小。例如,以下代码定义了一个包含5个整数的数组a:
int a[5];
在C语言中,数组的下标从0开始,因此数组a中的元素可以通过下标0到4来访问。例如,以下代码将第2个元素赋值为10:
a[1] = 10;
以上代码将第2个元素(下标为1)赋值为10。
需要注意的是,在C语言中,数组名表示数组的首地址,因此可以通过数组名来访问数组中的元素。例如,以下代码将第3个元素打印出来:
printf("%d", a[2]);
以上代码将打印出第3个元素(下标为2)的值。
二维数组的逻辑结构是一个矩形网格,由行和列组成。每个元素在数组中都有一个唯一的坐标,由其所在的行号和列号确定。
在二维数组中,可以将其看作一个由多个一维数组组成的数组。每个一维数组代表一行,而每个元素则是一个数组元素。
例如,对于一个3x4的二维数组,可以将其看作一个由3个一维数组组成的数组。每个一维数组有4个元素,代表一行。
二维数组的逻辑结构可以用一个简单的公式表示:
a[i][j] = a[i * COL + j]
其中,a是二维数组的名称,i是行号,j是列号,COL是列数。这个公式将二维数组的坐标转换为线性存储结构中的索引。
在C语言中,二维数组的声明和初始化方式如下:
int array[ROW][COL];
其中,ROW是行数,COL是列数。可以使用嵌套的循环来访问二维数组中的元素:
for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { printf("%d ", array[i][j]); } printf("\n"); }
这个循环会遍历二维数组的所有元素,并打印出来。
稀疏矩阵是一种特殊类型的矩阵,其中大多数元素都是零。对于稀疏矩阵,通常不存储所有的零元素,而是只存储非零元素。这样可以节省存储空间并提高处理速度。
在C语言中,可以使用多种方法来表示稀疏矩阵。以下是一种常见的方法,使用一个二维数组和一个额外的数组来存储非零元素的位置。
#include <stdio.h> #include <stdlib.h> #define MAX_SIZE 100 // 假设稀疏矩阵的最大大小为100x100 typedef struct { int row; // 非零元素的位置(行) int col; // 非零元素的位置(列) int value; // 非零元素的值 } SparseMatrixElement; typedef struct { SparseMatrixElement elements[MAX_SIZE]; // 存储非零元素的数组 int numElements; // 非零元素的数量 } SparseMatrix; // 初始化稀疏矩阵 void initSparseMatrix(SparseMatrix *matrix) { matrix->numElements = 0; } // 添加非零元素到稀疏矩阵 void addElement(SparseMatrix *matrix, int row, int col, int value) { matrix->elements[matrix->numElements].row = row; matrix->elements[matrix->numElements].col = col; matrix->elements[matrix->numElements].value = value; matrix->numElements++; } // 打印稀疏矩阵 void printSparseMatrix(SparseMatrix *matrix) { for (int i = 0; i < matrix->numElements; i++) { printf("%d %d %d\n", matrix->elements[i].row, matrix->elements[i].col, matrix->elements[i].value); } } int main() { SparseMatrix matrix; initSparseMatrix(&matrix); addElement(&matrix, 1, 2, 3); // 在位置(1,2)添加元素3 addElement(&matrix, 3, 4, 5); // 在位置(3,4)添加元素5 printSparseMatrix(&matrix); // 打印稀疏矩阵中的所有非零元素及其位置和值 return 0; }
在这个示例中,定义了一个SparseMatrixElement结构体来存储非零元素的位置和值。然后,定义了一个SparseMatrix结构体,其中包含一个SparseMatrixElement数组和一个表示非零元素数量的整数。通过调用addElement函数,可以将非零元素添加到稀疏矩阵中。最后,使用printSparseMatrix函数打印稀疏矩阵中的所有非零元素及其位置和值。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6