数据结构稀疏矩阵的转置及快速转置操作实现

稀疏矩阵

    • 头文件,宏定义,重命名
    • 创建矩阵
    • 销毁矩阵
    • 输出矩阵
    • 普通转置
    • 快速转置
    • 完整源码

头文件,宏定义,重命名

#include 
#include 

#define OK 1
#define ERROR -1
#define OVERFLOW -2
#define MAXSIZE 12500
 
typedef int ElemType;
typedef int Status;
//-----稀疏矩阵的三元组顺序表存储表示----
typedef	struct 
{
   
	int i,j;		//非零元的行下表和列下表 
	ElemType e;		//非零元的值 
}Triple;//三元组
typedef struct
{
   
	Triple data[MAXSIZE+1];//三元组表
	int mu,nu,tu;//矩阵行数,列数,非零元个数
}TSMatrix;

创建矩阵

挺长的
嗯,这个函数的功能
1.先输入矩阵的行数,列数,非零元个数,判断行数*列数是否大于非零元个数
2.三元组表的第0行用来存储矩阵的行数,列数,非零元个数
3.是否在相同位置重复输入
4.是否是按行非递减按列非递减输入
5.当输入次数大于等于非零元个数时退出循环,矩阵创建成功

Status CreateSMatrix(TSMatrix *M)
{
   
	int m=0;
	int k=0;
	while(1)
	{
   
		printf("请输入行数 列数 非零元个数\n");
		scanf("%d%d%d",&M->mu,&M->nu,&M->tu);
		if((M->mu*M->nu) < M->tu)
		{
   
			printf("输入错误,非零元素个数要小于等于行数乘列数,请重新输入。\n");
		}else
		{
   
			break;
		}	
	}
	(*M).data[k].i=M->mu;
	(*M).data[k].j=M->nu;
	(*M).data[k].e=M->tu;
	k++;
	while(1)
	{
   
		
		printf("请输入行下标 列下标 元素值\n");
		scanf("%d%d%d",&(*M).data[k].i,&(*M).data[k].j,&(*M).data[k].e);
		
		if(k>=2)
		{
   
			for(m=1;m<k;m++)
			{
   
				if((*M).data[k].i==(*M).data[m].i&&(*M).data[k].j==(*M).data[m].j)
				{
   
					printf("输入错误,输入的下标重复,请重新输入\n");
					k--;
					break;
				}
			}
			for(m=1;m<k;m++)
			{
   
				if(((*M).data[k].i==(*M).data[m].i&&(*M).data[k].j<(*M).data[m].j)||(*M).data[k].i<(*M).data[m].i)
				{
   
					printf("输入错误,下标输入时要递增输入,请重新输入!\n");
					k--;
					break;
				}
			}
		}
		k++;
		if(k>=(*M).tu+1)				
		{
   
			

你可能感兴趣的:(数据结构,c语言,数据结构)