資料結構——c語言描述 第五章 (2) 疏鬆陣列的轉置演算法__c#

來源:互聯網
上載者:User

這裡主要論述一下疏鬆陣列的轉置演算法,由於疏鬆陣列指的是矩陣中30%以下的內容是非零元素,這個時候我們不需要再用mxn的數組去儲存這個矩陣,這樣就比較浪費儲存空間了,同時在執行轉置的時候演算法開銷也比較大,我們這個時候可以使用三元組的形式儲存矩陣中的非零元素,三元組指的是用三個量來描述數組中的非零元素分別是行號,列號和資料。這樣一來就可以節約儲存空間。不多說了,先上代碼。

#include<stdio.h>#define MAXSIZE 1000#define TRUE 1#define FALSE 0typedef int EleType;typedef struct {    int row;    int col;    EleType e;}Triple;typedef struct {    Triple data[MAXSIZE+1];    int m;    int n;    int length;}TSMatrix;void initA (TSMatrix *A) ;int TransposeTSMatrix (TSMatrix A , TSMatrix *B) ;int main () {    TSMatrix A;    TSMatrix B;    int i;    initA (&A);    if (TransposeTSMatrix (A , &B)) {        for (i = 1 ; i <= A.length ; i++) {            printf ("B.data[%d].row = %d\n" , i , B.data[i].row);            printf ("B.data[%d].col = %d\n" , i , B.data[i].col);            printf ("B.data[%d].length = %d\n" , i , B.data[i].e);        }    }}void initA (TSMatrix *A) {    A->m = 6;    A->n = 7;    A->length = 8;    A->data[1].row = 1;    A->data[1].col = 2;    A->data[1].e = 12;    A->data[2].row = 1;    A->data[2].col = 3;    A->data[2].e = 9;    A->data[3].row = 3;    A->data[3].col = 1;    A->data[3].e = -3;    A->data[4].row = 3;    A->data[4].col = 6;    A->data[4].e = 14;    A->data[5].row = 4;    A->data[5].col = 3;    A->data[5].e = 24;    A->data[6].row = 5;    A->data[6].col = 2;    A->data[6].e = 18;    A->data[7].row = 6;    A->data[7].col = 1;    A->data[7].e = 15;    A->data[8].row = 6;    A->data[8].col = 4;    A->data[8].e = -7;}int TransposeTSMatrix (TSMatrix A , TSMatrix *B) {    int i , j;    int count = 1;    B->m = A.n;    B->n = A.m;    B->length = A.length;    if (B->length <= 0)        return FALSE;    for (i = 1 ; i <= A.n ; i++) {        for (j = 1 ; j <= A.length ; j++) {            if (A.data[j].col == i) {                B->data[count].row = i;                B->data[count].col = A.data[j].row;                B->data[count].e = A.data[j].e;                count++;            }        }    }    return TRUE;}
總結:這個演算法由於是以行為主序的,所以以原數組的列為迴圈,遍曆整個矩陣,選取列號符合制定的數字,如果符合那麼就把資料放到相應的轉置矩陣中。不跟了睡覺了,明天還要回家,晚上再跟快速演算法吧。

————————————————————————————————————————————分割線2016.6.29

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.