编程教程
您现在的位置: 中国个人站长站 >> 网络编程 >> Visual C++ >> 教程正文 数据结构学习(C++)——稀疏矩阵(十字链表【2】)
推荐位

数据结构学习(C++)——稀疏矩阵(十字链表【2】)

中国个人站长站 Visual C++ 点击数: 更新时间:2004-8-25

如果你细想想,就会发现,非零元节点如果没有指示位置的域,那么做加法和乘法时,为了确定节点的位置,每次都要遍历行和列的链表。因此,为了运算效率,这个域是必须的。为了看出十字链表和单链表的差异,我从单链表派生出十字链表,这需要先定义一种新的结构,如下:

class MatNode

{

public:

       int data;

       int row, col;

       union { Node<MatNode> *down; List<MatNode> *downrow; };

};

另外,由于这样的十字链表是由多条单链表拼起来的,为了访问每条单链表的保护成员,要声明十字链表类为单链表类的友元。即在class List的声明中添加friend class Matrix;

稀疏矩阵的定义和实现

#ifndef Matrix_H

#define Matrix_H

 

#include "List.h"

 

class MatNode

{

public:

       int data;

       int row, col;

       union { Node<MatNode> *down; List<MatNode> *downrow; };

       MatNode(int value = 0, Node<MatNode> *p = NULL, int i = 0, int j = 0)

              : data(value), down(p), row(i), col(j) {}

friend ostream & operator << (ostream & strm, MatNode &mtn)

       {

              strm << ''('' << mtn.row << '','' << mtn.col << '')'' << mtn.data;

              return strm;

       }

};

 

class Matrix : List<MatNode>

{

public:

       Matrix() : row(0), col(0), num(0) {}

       Matrix(int row, int col, int num) : row(row), col(col), num(num) {}

       ~Matrix() { MakeEmpty(); }

      

       void MakeEmpty()

       {

              List<MatNode> *q;

              while (first->data.downrow != NULL)

              {

                     q = first->data.downrow;

                     first->data.downrow = q->first->data.downrow;

                     delete q;

              }

              List<MatNode>::MakeEmpty();

              row = col = num = 0;

       }

 

       void Input()

       {

              if (!row) { cout << "输入矩阵行数:"; cin >> row; }

             if (!col) {      cout << "输入矩阵列数:"; cin >> col; }

              if (!num) { cout << "输入非零个数:"; cin >> num; }

              if (!row || !col || !num) return;

              cout << endl << "请按顺序输入各个非零元素,以列序为主,输入0表示本列结束" << endl;

              int i, j, k, v;//i行数 j列数 k个非零元 v

[1] [2] [3] [4] 下一页

教程录入:swh    责任编辑:swh 
个人站长站与你风雨同舟!
本站所提供的资源均来源于互联网,如有侵权行为,请与本站管理员联系,我们会第一时间删除!
·如果您发现《数据结构学习(C++)——稀疏矩阵(十字链表【2】)》文章有错误,也请通知我们修改!
联系邮箱chinageren#126.com,谢谢支持!
站内搜索:
版权所有:中国个人站长站 2007-2008 未经授权禁止复制或建立镜像 客服QQ号:112731235
copyright © 2007-2008 www.ChinaGeRen.com online services. all rights reserved. 苏ICP备05000059号