9-1散列表源代码

// HashList.cpp : 定义控制台应用程序的入口点。

//

 

#include "stdafx.h"

#include<iostream>

using namespace std;

struct node

{

    int r;//行标

    int c;//列标

    double dat;//数据

};

class triple

{

private:

    int row;//行数

    int col;//列数

    int num;//非零个数

    node *ptr;//存放数组的首地址

public:

    triple(int co,int ro,int nu):col(co),row(ro),num(nu)

    {

        ptr=new node[num];//分配num,盛放num个元素

        cout<<"请输入"<<num<<"个三元组元素\n"<<"格式为: 2 3 6.7\n其中2为行标,3为列标,6.7为数据元素"<<endl;

        for(int i=0;i<num;i++)

        {

            cin>>ptr[i].r;

            cin>>ptr[i].c;

            cin>>ptr[i].dat;

        }

    }

    ~triple(){delete[]ptr;}

    void print()

    {

        int flag=ptr[0].r;

        cout<<"第"<<flag<<"行元素为:";

        for(int i=0;i<num;i++)

        {

            if(ptr[i].r!=flag)

            {

                cout<<"\n";

                flag=ptr[i].r;

                cout<<endl;

                cout<<"第"<<flag<<"行元素为:";

            }

            cout<<"("<<ptr[i].r<<","<<ptr[i].c<<","<<ptr[i].dat<<")  ";

        }

    }

    void transpose()//采用逐行复制法进行转置,同时输出转置后的三元组

    {

                   node *ptr1;

                   ptr1=new node[num];//分配num,盛放num个元素

                   for(int i=0,k=0;i<=num;++i)

                   {

                            for(int j=0;j<=num;++j)

                            {

                                     if(ptr[j].c==i)                                 //按列号从小到大转置

                                     {

                                               ptr1[k].r=ptr[j].c;               //把列号小给另一临时结构数组

                                               ptr1[k].c=ptr[j].r;

                                               ptr1[k++].dat=ptr[j].dat;

                                     }

                            }

                   }

                   ptr=ptr1;

                   print();

    }

};

void main()

{

    cout<<"请输入数组的行列和元素个数:\n";

    int a[3];

    for(int i=0;i<3;i++)

    {

        cin>>a[i];

    } 

    triple t(a[0],a[1],a[2]);

    t.print();//输出原矩阵

    cout<<"转制后的矩阵为:";

    t.transpose();

         cout<<endl;

         system("pause");

}

 

posted @ 2018-01-09 18:21  gd_沐辰  阅读(168)  评论(0编辑  收藏  举报