回 帖 发 新 帖 刷新版面

主题:急!三元组的转置问题

请大家棒棒手,我是刚刚学习数据结构的,如今学到稀疏矩阵的三元组,自己编写了个实现三元组的程序,发现好多错误,自己的英文水平不太好,该起来有困难,望大家棒棒忙(其中的算法是书本上的,但我发现这本书的源代码有误,难免下面有许多错误)。希望大家不吝赐教。谢谢!


#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef int ElemType;
typedef struct
{
    int r;
    int c;
    ElemType d;
}Mat;
typedef struct
{   
    int rows;
    int cols;
    int nums;
Mat data[MAXSIZE];
}Spmatrix;
Spmatrix a1,b1;
int M=5;
int N=5;
void CreatMat(Spmatrix *f,ElemType A[M][N]);
void Fasttran(Spmatrix a,Spmatrix *b);
void OutMat(Spmatrix f);
void main()
{
    int cord;
    int array[5][5]={{0,2,0,0,5},{0,0,0,6,0},{1,0,0,6,0},{0,7,0,0,3},{8,0,0,4,6}};
    do{ 
        printf("原二维矩阵如下:");
        for(int i=0;i<5;i++)
        {
            printf("\n");
        for(int j=0;j<5;j++)
            printf("2%d",array[i][j]);
        }
        printf("\n        主菜单:\n");
        printf("\n      1 建立三元组顺序表        \n");
        printf("\n      2 三元组转置              \n");
        printf("\n      3 结束程序                \n");
        printf("----------------------------------\n");
        printf("请输入选择(1,2,3)");scanf("%d",&cord);
        switch(cord)
        {
        case 1:{
            void CreatMat(&a1,array[5][5]);
            void OutMat(a1);
        }break;
        case 2:{
            void Fasttran(a1,&b1);
            void OutMat(&b1);
               }break;
        case 3:exit(0);
        }
    }while(cord<=3);
}


/*创建三元组*/
void CreatMat(Spmatrix *f,ElemType A[M][N])
{
    int i,j;
    f->rows=M;
    f->cols=N;
    f->nums=0;
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        if(A[i][j]!=0)
    {
        f->data[f->nums].r=i;
        f->data[f->nums].c=j;
        f->data[f->nums].d=A[i][j];
         f->nums++;
    }
    }
}

/*三元组转置(行列转置)*/
void fasttran(Spmatrix a,Spmatrix *b)

    int col;
    int p;
    int q;
    b->rows=a.cols;
    b->cols=a.rows;
    b->nums=a.nums;
    if(a.nums!=0)
    {
        for(col=1;col<=a.cols;col++) num[col]=0;
        for(int k=0;k<a.nums;k++) num[a.data[k].c++];
        int pot[1]=0;
        for(col=2;col<=a.nums;k++)pot[col]=pot[col-1]+num[col-1];
        for(p=0;p<a.nums;p++)
    {
        col=a.data[p].c;
        q=pot[col];
        b->data[q].r=a.data[p].c;
        b->data[q].c=a.data[p].r;
        b->data[q].d=a.data[p].d;
        pot[col]++;
    }
    }
}


/*三元组的输出*/
void OutMat(Spmatrix f)
{
    int i;
    if(f.nums<=0) return;
    printf("\t%d\t%d\t%d\n",f.rows,f.cols,f.nums);
    printf("------------------\n");
    for(i=0;i<f.nums;i++)
    printf("\t%d\t%d\t%d\n",f.data[i].r,f.data[i].c,f.data[i].d);
}

回复列表 (共1个回复)

沙发

经过修改还是有错误,但是错误没那么多,下面的问题真是不知为什么?

错误提示:
--------------------Configuration: Cpp1 - Win32 Debug--------------------
Compiling...
Cpp1.cpp
e:\数据结构\第四次上机\cpp1.cpp(46) : error C2078: too many initializers
e:\数据结构\第四次上机\cpp1.cpp(50) : error C2061: syntax error : identifier 'a1'
e:\数据结构\第四次上机\cpp1.cpp(51) : error C2061: syntax error : identifier 'b1'
e:\数据结构\第四次上机\cpp1.cpp(91) : error C2109: subscript requires array or pointer type
e:\数据结构\第四次上机\cpp1.cpp(91) : error C2106: '=' : left operand must be l-value
e:\数据结构\第四次上机\cpp1.cpp(92) : error C2109: subscript requires array or pointer type
e:\数据结构\第四次上机\cpp1.cpp(92) : error C2105: '++' needs l-value
e:\数据结构\第四次上机\cpp1.cpp(93) : error C2440: 'initializing' : cannot convert from 'const int' to 'int [1]'
        There are no conversions to array types, although there are conversions to references or pointers to arrays
e:\数据结构\第四次上机\cpp1.cpp(94) : error C2109: subscript requires array or pointer type
执行 cl.exe 时出错.

Cpp1.obj - 1 error(s), 0 warning(s)


修改后的代码:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef int ElemType;
typedef struct
{
    int r;
    int c;
    ElemType d;
}Mat;
typedef struct
{   
    int rows;
    int cols;
    int nums;
Mat data[MAXSIZE];
}Spmatrix;

int M=5;
int N=5;
int CreatMat(Spmatrix *f,ElemType A[5][5]);
Spmatrix *Fasttran(Spmatrix a,Spmatrix *b);
Spmatrix *OutMat(Spmatrix f);
void main()
{  
    Spmatrix a1,b1;
    int cord;
    int array[5][5]={{0,2,0,0,5},{0,0,0,6,0},{1,0,0,6,0},{0,7,0,0,3},{8,0,0,4,6}};
    do{ 
        printf("原二维矩阵如下:");
        for(int i=0;i<5;i++)
        {
            printf("\n");
        for(int j=0;j<5;j++)
            printf("2%d",array[i][j]);
        }
        printf("\n        主菜单:\n");
        printf("\n      1 建立三元组顺序表        \n");
        printf("\n      2 三元组转置              \n");
        printf("\n      3 结束程序                \n");
        printf("----------------------------------\n");
        printf("请输入选择(1,2,3)");scanf("%d",&cord);
        switch(cord)
        {
        case 1:{
            int CreatMat(&a1,array[5][5]);
            Spmatrix OutMat(a1);
        }break;
        case 2:{
            Spmatrix *Fasttran(a1,&b1);
            Spmatrix *OutMat(b1);
               }break;
        case 3:exit(0);
        }
    }while(cord<=3);
}



int CreatMat(Spmatrix *f,ElemType A[5][5])
{
    int i,j;
    f->rows=M;
    f->cols=N;
    f->nums=0;
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        if(A[i][j]!=0)
    {
        f->data[f->nums].r=i;
        f->data[f->nums].c=j;
        f->data[f->nums].d=A[i][j];
         f->nums++;
    }
    }
}


Spmatrix *fasttran(Spmatrix a,Spmatrix *b)

    int col;
    int p;
    int q;
    int num;
    b->rows=a.cols;
    b->cols=a.rows;
    b->nums=a.nums;
    if(a.nums!=0)
    {
        for(col=1;col<=a.cols;col++) num[col]=0;
        for(int k=0;k<a.nums;k++) num[a.data[k].c]++;
        int pot[1]=0;
        for(col=2;col<=a.nums;k++)pot[col]=pot[col-1]+num[col-1];
        for(p=0;p<a.nums;p++)
    {
        col=a.data[p].c;
        q=pot[col];
        b->data[q].r=a.data[p].c;
        b->data[q].c=a.data[p].r;
        b->data[q].d=a.data[p].d;
        pot[col]++;
    }
    }
}



Spmatrix *OutMat(Spmatrix f)
{
    int i;
    if(f.nums<=0) printf("三元组不存在\n");
    printf("\t%d\t%d\t%d\n",f.rows,f.cols,f.nums);
    printf("------------------\n");
    for(i=0;i<f.nums;i++)
    printf("\t%d\t%d\t%d\n",f.data[i].r,f.data[i].c,f.data[i].d);
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册