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");
}