• 数据结构之数组


    数组本身就是一种数据结构,他是对线性表的一种扩充数组主要用于对矩阵的压缩和表示

    一.特殊矩阵的压缩

    二.稀疏矩阵的压缩

         1.三元组表示法:

    #include<stdio.h>
    #define MAXSIZE 1000
    typedef int ElemType;
    //定义一种结构体记录每个压缩后的非零点在原矩阵中的行下标和列下标,以及数据 
    typedef struct Node{
    	int row,col;
    	ElemType data;
    }Triple;
    //定义一种结构体:新的压缩矩阵,包含所有原矩阵非零点的数组,
    //原矩阵的行数,列数,新压缩矩阵非零点的个数 
    typedef struct YS{
    	Triple data[MAXSIZE+1];//data[0]抛弃不用 
    	int m,n,len;
    }TSMatrix;
    

      

                三元组表示法下的稀疏矩阵转置

                        

    #include<stdio.h>
    #define MAXSIZE 1000
    typedef int ElemType;
    //定义一种结构体记录每个压缩后的非零点在原矩阵中的行下标和列下标,以及数据 
    typedef struct Node{
    	int row,col;
    	ElemType data;
    }Triple;
    //定义一种结构体:新的压缩矩阵,包含所有原矩阵非零点的数组,
    //原矩阵的行数,列数,新压缩矩阵非零点的个数 
    typedef struct YS{
    	Triple data[MAXSIZE+1];//data[0]抛弃不用 
    	int m,n,len;
    }TSMatrix;
    
    
    //矩阵转置 :列序递增转置法 
    void TransposTSMatrix(TSMatrix A,TSMatrix B)
    {
    	int i,j=1,k;
    	if(B.len>0)
    	{
    		
    		for(k=1;k<A.n;k++)
    			for(i=1;i<A.len;i++)
    				if(A.data[i].col==k)
    				{
    					B.data[j].row=A.data[i].col;
    					B.data[j].col=A.data[i].row;
    					B.data[j].data=A.data[i].data;
    					j++;
    				}
    	
    	}
    }
                         
    
    //一次定位快速转置法
    void FastTransportTSMatrix(TSMatrix* A,TSMatrix* B)
    {
    	int col,t,p,q;
    	int num[MAXSIZE],postion[MAXSIZE];//num[i]记载A中第i列中非零元素个数,
    //postion[i]中记载A中第i列中下一个非零元素在三元组表B中的正确存放位置
    	B->len=A->len;
    	B->n=A->m;
    	B->m=A->n;
    	if(B->len)
    	{
    		//初始化每列中的非零元素个数为0 
    		for(col=1;col<=A->len;i++)
    			num[col]=0;
    		//计算出A每列中非零元素的个数 
    		for(t=1;t<=A->len;t++)
    			num[A->data[t]->col]++;
    		//第一列中第一个非零元素在B中的位置 
    		potion[1]=1;
    		//计算出每列中第一个非零元素在三元组表B中的正确存放位置 
    		for(col=2;col<=A->n;col++)
    		postion[col]=postion[col-1]+num[col-1];
    		
    		//依次将A中每一个元素按照列序转置 
    		for(p=1;p<=A->len;p++)
    		{
    			col=A->data[p]->col;q=postion[col];
    			B->data[q]->col=A->data[p]->row;
    			B->data[q]->row=A->data[p]->col;
    			B->data[q]->data=A->data[p]->data;
    			postion[col]++;
    		}
    		
    	}
    	 
    } 
    

          

      二.稀疏矩阵的链式存储结构:十字链表

    建立十字链表

    #include<stdio.h>
    typedef ElemType int;
    typedef struct OLNode
    {
    	int row,col;
    	ElemType value;
    	struct OLNode* right,*down;	
    }OLNode,*OLink;
    typedef struct TS
    {
    	//行链表,列链表的头指针向量 
    	OLink row_head,col_head;
    	int m,n,len;//稀疏矩阵的行数,列数,非零元素的个数 
    }CrossList;
    

      

            

    亲爱的听众朋友我是你的代班DJ
  • 相关阅读:
    java-selenium三种等待方式
    java-selenium八种元素定位方式
    java-selenium浏览器常用操作命令
    ELK日志分析平台搭建全过程
    详解Oracle架构、原理、进程
    Oracle建立约束、删除约束
    OGG基础知识整理
    由浅入深解读Redis高级能力及性能调优
    《收获,不止Oracle》读书笔记
    转:一条sql语句在mysql中是如何执行的
  • 原文地址:https://www.cnblogs.com/YTYMblog/p/5414715.html
Copyright © 2020-2023  润新知