Some operations of matrices

xiaoxiao2021-03-06  38

/ *********************/**************

#define True 1

#define false 0

#define ok 1

#define error 0

#define infeasivle -1

#define overflow -2

#define list_init_size 100

#define ListINcreme 10

#define Equal 1

#define stack_init_size 100

#define stackincrement 10

#define max 100

#define maxSize 100

/*********** Triplet.H************

#include

#include

#include

#include

TypedEf Int * Triplet;

Typedef struct triple {

INT I, J;

ELMTYPE E;

} Triple;

Typedef struct rlsmatrix {

Triple Data [MAXSIZE 1];

Int rpos [80];

Int Mu, Nu, Tu;

} Rlsmatrix;

STATUS INITTRIPLET ();

Status destroytriplet ();

STATUS GET ();

STATUS PUT ();

STATUS isascendin ();

STATUS Isdescending ();

STATUS max ();

STATUS min ();

void printtriplet (); / * not in general use, only for multiplication.c * /

Status multsmatrix (); / * not in general use, only for multiplication.c * /

Status scanmatrix (); / * not in general use, only for multiplication.c * /

/ * NOT IN General Use, Only for TSMatrix.c * /

Status fasttransposeesmatrix ();

STATUS INITTRIPLET (Triplet * T, ElemType V1, ElemType V2, ELEMTYPE V3) {

(* T) = (ELMTYPE *) Malloc (3 * sizeof (elemType));

IF (! t)

EXIT (OVERFLOW);

(* T) [0] = V1; (* T) [1] = V2; (* T) [2] = V3;

Return OK;

}

Status DestroyTriplet (Triplet T) {

Free (t);

T = NULL;

Return OK;

}

Status Get (Triplet T, INT I, ELEMTYPE * E) {

IF (i <1 || i> 3)

Return Error;

* E = T [I-1];

Return OK;

}

Status Put (Triplet T, INT I, ELMTYPE * E) {

IF (i <1 || i> 3) Return Error;

T [I-1] = * e;

Return OK;

}

Status isascending (Triplet T) {RETURN (T [0] <= T [1]) && (t [1] <= t [2]);

}

Status isdescending (Triplet T) {

Return (T [0]> = T [1]) && (t [1]> = t [2]);

}

Status Max (Triplet T, ELMTYPE * E) {

e [0] = (t [0]> = t [1])? ((t [0]> = t [2])? T [0]: T [2]): ((t [1]> = T [2])? T [1]: t [2]);

Return OK;

}

Status min (Triplet T, ELEMTYPE * E) {

e [0] = (t [0] <= t [1])? ((t [0] <= t [2])? T [0]: T [2]): ((t [1] < = T [2])? T [1]: t [2]);

Return OK;

}

Void Printtriplet (rlsmatrix m)

{

INT R, C, N;

For (r = 1, n = 1; r <= m.mu; r ) {

For (c = 1; c <= m.nu; C ) {

IF (r == m.data [n] .i && c == m.data [n] .j) {

Printf ("% - 6d", M.DATA [N] .e);

N ;

}

Else Printf ("% - 6d", 0);

}

Printf ("/ n");

}

PUTS ("/ n");

}

Status Multsmatrix (rlsmatrix M, RLSMATRIX N, RLSMATRIX * Q)

{

INT AROW, TP, BROW, P, T, Q, CCOL, CTEMP [100];

IF (M.nu! = n.mu)

{

Printf ("The Colt of First Matrix is ​​Unequal The Row of Second Matrix !!");

Return Error;

}

Q-> MU = M.MU; Q-> Nu = N.nu; Q-> TU = 0;

IF (m.tu * n.tu! = 0) {

For (Arow = 1; AROW <= M.MU; AROW)

{

For (p = 0; p <= n.nu; p )

CTEMP [P] = 0;

Q-> rpos [arow] = Q-> TU 1;

IF (Arow

TP = m.rpos [AROW 1];

Else

TP = m.tu 1;

For (p = m.rpos [arow]; p

{

Brow = m.data [p] .j;

IF (brow

T = n.rpos [brow 1];

Else

T = n.tu 1;

For (q = n.rpos [brow]; q

{

CCOL = N.DATA [q] .j;

CTEMP [CCOL] = M.data [P] .e * n.data [q] .e;

}

}

For (ccol = 1; ccol <= q-> nu; ccol)

IF (CTEMP [CCOL]) {

IF ( Q-> TU> maxsize) Return Error;

Q-> Data [q-> TU] .i = arow; q-> data [q-> tu] .j = ccol;

Q-> Data [q-> TU] .e = ctemp [ccol];

}

}

}

Return OK;

}

Status Scanmatrix (rlsmatrix * m)

{

INT I, J, K, SUM [80];

Printf ("/ N / N / N / N / N / N / N / N / N / N / N / N / N / N / N / N / N / N / N / NUS THE SIGN OF MATRIX'S COL, AND 'E' OR 'TU' Is The length of matrix: / nmu = nu = Tu = / N ");

Scanf ("% D% D% D", & M-> MU, & M-> Nu, & M-> TU);

IF (M-> TU> (M-> MU * M-> NU)))

Printf ("The Third Number Which You Had Input Has Error! Too Big !!! / N");

Else

{

Printf ("ROW = COL = DATE = / N");

For (i = 1; i <= m-> tu; i )

{

M-> Data [0] .i = 0;

M-> Data [0] .j = 0;

M-> DATA [0] .e = 0;

Scanf ("% D% D% D", & M-> DATA [I] .i, & m-> data [i] .j, & m-> data [i] .e);

IF ((M-> Data [i] .i> m-> mu) ||

(M-> data [i] .j> m-> nu) ||

(M-> DATA [I] .i data [i-1] .i))

Printf ("The date you had INPUTED HAS ERROR !!! / N");

}

For (i = 1; i <= m-> mu; i )

SUM [I] = 0;

For (i = 1; i <= m-> tu; i)

SUM [M-> Data [i] .i];

M-> RPOS [1] = 1;

FOR (i = 2; i <= m-> mu; i)

M-> RPOS [I] = m-> RPOS [I-1] SUM [I-1];

}

}

Status FastTransposeSmatrix (rlsmatrix M, RLSMatrix * T)

{

INT COL, T, P, Q, NUM [100], CPOT [100];

T-> MU = m.nu; t-> Nu = m.mu; t-> tu = m.tu;

IF (t-> tu) {

For (COL = 1; COL <= M.NU; COL) NUM [col] = 0;

For (t = 1; t <= m.tu; t) Num [M.Data [T] .j];

Cpot [1] = 1;

For (COL = 2; Col <= M.NU; COL) cpot [col] = cpot [col-1] NUM [col-1];

For (p = 1; p <= m.tu; p) {

COL = M.Data [P] .j;

Q = cpot [col];

T-> DATA [q] .i = m.data [p] .j;

T-> Data [q] .j = m.data [p] .i;

T-> DATA [q] .e = m.data [p] .e;

cpot [col];

}

}

Return OK;

}

转载请注明原文地址:https://www.9cbs.com/read-69017.html

New Post(0)