Differences between arrays and linear tables we should have learned the difference between arrays and linear tables before. They are the same:

(1) They are the same, they are a **number of data elements of the same data type A0,a1,a2,..., a finite sequence of an-1**

The difference between them:

(1) An array requires that its elements occupy a contiguous block of memory space, whereas a linear table has no such requirement

(2) The elements of a linear table are logically non-divided elements, and each element in the array can also be an array

(3) The operation of an array is primarily to store data in an array element of a subscript and to take an array element of a subscript, which differs from the INSERT and delete operations of a linear table

Definition of an array

The logical definition of an array is that an n (n>1)-dimensional array is a vector whose elements are n-1-dimensional arrays with the same upper and lower bounds.

The number of elements in an n-dimensional array

Set n-dimensional arrays as:

A[c1. D1, C2. D2, ..., CN.. DN]

The number of elements is:

-Arrays are logically generalized for linear structures

-the array is a linear structure with linear table elements, and the structure of the elements is the same

-Arrays can be considered as a set of pairs of subscripts and values

-Arrays are a logical structure

Array operations: Arrays generally do not insert and delete operations (less efficient)

There are generally only two types of operations for arrays:

(1) Given a set of subscripts, access to the corresponding data elements

(2) Given a set of subscripts, modify the value of the corresponding data element

Sequential storage of arrays

(1) One-dimensional array (n elements) of any element of the AI's memory unit address

LOC (AI) =loc (a0) +i*k

(2) A two-dimensional array of m rows n columns

LOC (AIJ) =loc (a00) + (I*N+J) *k

Note: The array elements in the C language use the method of storing the main sequence of the line, which is the order of precedence.

conventions for sequential storage by line order and column order

A storage image with "line order as the main order"

The storage location of any element A[i][j] in a two-dimensional array

LOC (I,J) = loc (0,0) + (B2XI+J) XL

Where: LOC (0,0) is called the base address or base

Set two-dimensional array a[c1. D1][c2. D2] where C1, c2, and D1, D2 are the lower and upper bounds of the subscript for the two-dimensional array A, each array element is a storage unit of L, and the first element A[C1][C2] is stored in LOC (C1,C2), then any element in the two-dimensional array a[i][j] (C1≤I≤D1, C2≤J≤D2) The storage location can be determined by the following formula:

In the C language, the subscript is zero-based, that is: a[0..d1][0..d2], the storage > location of the array element A[i][j] is:

LOC (i,j) =loc (0,0) + (i* (d2+1) +j) *l

element storage location for n-dimensional arrays

In an n-dimensional array, the location where the array elements are stored is determined:

The formula is as follows:

Representation method of three-dimensional array

LOC (I,j,k) = loc (L1,L2,L3) +

[(I-L1) * (U2-L2) * (U3-L3) + (J-L2) * (U3-L3) + (K-L3)]* L

If l1=l2=l3 = 0;

LOC (I,j,k) = loc (0,0,0) + (i * u2* U3 + J * U3 +k) *l

Compressed storage of matrices

The idea of compressing storage

When the order of the matrix is higher and some elements in the matrix have special properties, space-saving storage methods can be used (compressed storage)

Special matrices

An element with the same value or a non-0 element distribution has a certain regularity

(1) Symmetric matrix

If the elements in the N-order matrix A Meet the following properties:

Aij=aji 1≤i, J≤n

It is called a N-order symmetric matrix.

Analysis:

For a symmetric matrix, N2 elements can be compressed into n (n+1)/2 spaces

The element in the lower triangle (including the diagonal) in the main order of the row order

stored in a vector b[n (n+1)/2]:

Symmetry Matrix Features:

There is a one by one correspondence between Vector b[k] and element AIJ in the matrix:

The following press subscript from 0 to start discussion

Subscript Transformation Formula

Vector B[k] and the relationship between element AIJ in the matrix: deduced by I and J K:

(2) Triangular matrix

` 什么是三角矩阵呢？`

Triangular matrix:

The lower triangular matrix refers to n-order matrices with zero or constant elements in the upper triangle (excluding diagonal) of the matrix.

Note: The lower triangular matrix storage formula and the symmetric matrix store the following elements of the main diagonal are basically the same formula, just add an additional storage constant or zero storage space to

(3) Diagonal matrix

Three diagonal matrices: a total of 3n-2 non-0 elements, deposited in b[3n-2], elements in a one-dimensional array b

The corresponding relationship between subscript k and element subscript I and J in the matrix is:

K = 3 (i-1)-1 (lower left corner of main diagonal, i.e. i=j+1)

K = 3 (i-1) (on the main diagonal, i.e. i=j)

K = 3 (i-1) +1 (on the main diagonal, i.e. i=j-1)

By the above three-type, to be

K=2 (i-1) + (j-1) (1≤i,j≤n; 0≤k≤3n-1)

Sparse matrices

Less than 0 elements and irregular distribution

Sparse factor:

Assuming that the matrix of M row n columns contains T 0 elements, then

Sparse factor is δ= t/(m*n) <= 0.05

Why use sparse matrices?

The problem that arises when you represent a high-order sparse matrix in a two-dimensional array is the usual method:

(1) 0 value element takes up a lot of space

(2) Calculation of many and 0 values of the operation, in case of division, but also to determine whether the divisor is zero

The principle of problem solving:

(1) Save or Save as little as 0 value elements

(2) Minimizing operations with no practical significance

(3) easy to operate. That is, the element corresponding to the subscript value (I,J) can be found as quickly as possible to find a non-0 value element of the same row or column as quickly as possible

Note: When compressing storage, do not allocate storage space on 0 elements, only store non 0 in sparse matrix

Sequential storage structure-ternary table

Ternary Order Table

Ternary Group Type

`#define MAXSIZE 12500struct { int i, j; //该非零元的行下标和列下标 ElemType e; // 该非零元的值 } Triple; `

Sparse matrix Types

`typedefstruct { Triple 1]; int mu, nu, tu; } TSMatrix; `

Chained storage structure-cross linked list

the structure of non-0-element nodes in the cross-linked list:

The structure type of the cross-linked list

`typedef struct OLNode { int i , j; ElemType e; struct OLNode *down, *right; }OLNode;*OLink;typedef struct { OLink *rhead, *chead ; //行、列链表头指针 int mu, nu , tu ;} CrossList;`

Data Structures-arrays