这篇文章是关于严蔚敏清华版《数据结构》教材的代码,包括书上大纲规定的线性表,链表,栈,队列,二叉树,图,排序,
查找等基本算法的编码,还包括循环链表,广义表,两栈共享空间,字符串模式匹配等非常规,较难数据结构的编码,除此之外书本
后面大量的思考题,例如约瑟夫环,括号匹配,迷宫问题,八皇后,火车厢重排,斐波那契查找等一些列经典问题也有代码。文章中
的代码,均已调试通过,并附有程序运行结果,读者可以自行复制运行。
这是我用一个假期重学数据结构的劳动结果,希望此篇文章,能给初学数据局结构的同学以帮助,代码若有什么问题,可以
直接用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();
}