这篇文章是关于严蔚敏清华版《数据结构》教材的代码,包括书上大纲规定的线性表,链表,栈,队列,二叉树,图,排序,

查找等基本算法的编码,还包括循环链表,广义表,两栈共享空间,字符串模式匹配等非常规,较难数据结构的编码,除此之外书本

后面大量的思考题,例如约瑟夫环,括号匹配,迷宫问题,八皇后,火车厢重排,斐波那契查找等一些列经典问题也有代码。文章中

的代码,均已调试通过,并附有程序运行结果,读者可以自行复制运行。

   这是我用一个假期重学数据结构的劳动结果,希望此篇文章,能给初学数据局结构的同学以帮助,代码若有什么问题,可以

直接用QQ与我联系,感谢赐教。

   由于整个篇幅较长,相关内容按照数据结构课本章节内容组织。下面是第三章,其他章节请参照其他博客。

                第三章   广义表

 

#include <iostream>

using namespace std;

template <class T>

struct element

{

int row,col;

T item;

};

const int MaxSize=100;

template <class T>

class SpareMatrix

{

private:

element<T> data[MaxSize];

int mu,nu,tu;//定义行数,列数,非零元素个数

public:

SpareMatrix(element<T> Data[],int Mu,int Nu,int Tu);

SpareMatrix(){}

~SpareMatrix(){}

void Print();

void OrignalMatrix();

friend void Transfer(SpareMatrix &A,SpareMatrix &B);

};

template <class T>

SpareMatrix<T>::SpareMatrix( element<T> Data[],int Mu,int Nu,int Tu)

{

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

{

data[i].row=Data[i].row;

data[i].col=Data[i].col;

data[i].item=Data[i].item;

}

mu=Mu;

nu=Nu;

tu=Tu;

}

template <class T>

void SpareMatrix<T>::Print()

{

cout<<"********打印稀疏矩阵的存储情况*********"<<endl; 

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

{

cout<<data[i].row<<" ";

cout<<data[i].col<<" ";

cout<<data[i].item<<" ";

cout<<endl;

}

}

template <class T>

void SpareMatrix<T>::OrignalMatrix()

{

cout<<"***********原始矩阵如下***********"<<endl;

int M[10][10]={0};

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

M[data[i].row][data[i].col]=data[i].item;

for(i=0;i<mu;i++)

{

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

cout<<M[i][j]<<" ";

cout<<endl;

}

}

template <class T>

void Transfer(SpareMatrix<T> &A,SpareMatrix<T> &B)

{

 B.mu=A.nu;

 B.nu=A.mu;

 B.tu=A.tu;

 if(A.tu>0)

 {

 for(int i=0;i<A.tu;i++)

 {

  B.data[i].row=A.data[i].col;

  B.data[i].col=A.data[i].row;

  B.data[i].item=A.data[i].item;

 }

 }

}

void main()

{

cout<<"************关于稀疏矩阵的操作************"<<endl;

int M[10][10];

int NonZero=0;

int Row,Column;

cout<<"输入稀疏矩阵的行数与列数:";

cin>>Row>>Column;

cout<<"请初始化稀疏矩阵("<<Row<<"*"<<Column<<"):"<<endl;

int i,j;

for( i=0;i<Row;i++)

for(j=0;j<Column;j++)

{

cin>>M[i][j];

}

for(i=0;i<Row;i++)

for(j=0;j<Column;j++)

{

if(M[i][j]!=0)

NonZero++;

}

element<int> E1[MaxSize];

int loc=0;

for(i=0;i<Row;i++)

for(j=0;j<Column;j++)

{

if(M[i][j]!=0)

{

E1[loc].row=i;

E1[loc].col=j;

E1[loc].item=M[i][j];

loc++;

}

 

}

SpareMatrix<int> S1(E1,Row,Column,NonZero);

S1.Print ();

S1.OrignalMatrix();

SpareMatrix<int> S2;

cout<<"**********稀疏矩阵的转置*************"<<endl;

Transfer(S1,S2);

S2.Print();

S2.OrignalMatrix();

}

 posted on 2012-10-02 13:43  莽原_狼  阅读(372)  评论(0编辑  收藏  举报