`

数组的十字链表存储

 
阅读更多
#include <iostream.h>
#include<iomanip.h>
#include<conio.h>
typedef int ElemType;
struct Node
{   int row;int col;
    Node *down;
    Node *right;
    union             // 定义公用体以节省空间
     { Node *next;
       ElemType val;
     };
};
class Linkedmat                
{ private:
       Node  *hm;  // 定义十字链表的头指针
   public:
      void Creat();   //创建一个矩阵十字链表
      void Show();   // 输出显示
     //……………………
};
    
void  Linkedmat::Creat()
{   int m, n, s, r, c, v,t;
    //Node *p,*q,*cp[20];
      Node *p;
      Node *q; Node *cp[20];   
    cout << "行维数: ";  cin >> m;
    cout << "列维数: ";  cin >> n;
    cout << "非零元素个数: ";  cin >>t;
    s = m > n ? m : n;     //取行列数的大值
    p = new  Node;
    p->row = m;  p->col = n;
    hm = p;    hm->next=hm;
      cp[0]=hm;
for ( int i = 1; i <= s; i++ )
// 创建所有行列表头头结点,共 s 个
    {  p = new Node;
       p->row = 0;  p->col = 0;
       cp[i] = p;
       p->right= p;
       p->down = p;
       cp[i-1]->next = p;
    }
    cp[s]->next = hm;
cout << "最大行坐标: " << m << endl;
cout << "最大列坐标: " << n << endl;
cout << "非零元素个数: " <<t << endl;
for( i=0; i<t; i++)
{ cout << "\n 输入三元组:下标从(1,1)开始 ";    cin >> r >> c >> v;
    p = new Node;     //分配新的非零元素结点
    p->row = r;
    p->col = c;
    p->val = v;
    q = cp[r];            //在当前行找插入位置
while ( q->right != cp[r]  &&  (q->right->col < c) )
    { q = q->right;}
p->right = q->right;
q->right = p;
q = cp[c];           //在当前列找插入位置
      while ( q->down != cp[c]  &&  (q->down->row < r) )
        {q = q->down;}
      p->down = q->down;
      q->down = p;
   }  //for  i=0到t-1;
}  //creat建立函数结束
void Linkedmat::Show()
{  //Node *p,* p1; 
     Node *p;Node *p1;
    int i,j;
cout << "\n 十字链表存储的矩阵为:" << endl ;
for ( i = 0;  i <= hm->col;  i++ )
     cout <<setw(6)<< i;        //  输出各列的标号
cout << endl << endl;
for ( i = 1, p = hm->next; p != hm; i++ )
  {   cout << setw(6) << i; // 输出个行的标号
    for ( j = 1, p1 = p->right; p1 != p; j++ )
     if ( j == p1->col )
      {cout<<setw(6)<<p1->val;  p1=p1->right; }
    else   cout << setw(6)<< "   ";
   cout << endl;  //换行
   p = p->next;      //找下一个行列表头结点
     }
} //输出函数结束
void main()
{
    Linkedmat linkedmat;
    linkedmat.Creat();
    linkedmat.Show ();
}
http://wgyblog.com/html/158.html
分享到:
评论

相关推荐

    十字链表创建的实验报告

    学会用十字链表存储稀疏矩阵,深刻理解链表的各种特点,并能加以灵活运用。 三、实验基本原理 十字链表是数组的动态存储结构,可以看作是线性链表的扩展。在这种结构中,稀疏矩阵中的每一个非零元素对应一个结点,每...

    数据结构中的数组和广义表,C语言

    5.1 数组的基本概念 5.2 稀疏矩阵的三元组存储 5.3 稀疏矩阵的十字链表存储 5.4 广义表 5.5 迷宫问题 习题五

    数据结构实验报告4-数组与广义表-基于十字链表的稀疏矩阵转置-实验内容及要求.docx

    编写程序,从字符文件读入三个正整数m, n, t以及t个三元组(i, j, e)建立稀疏矩阵的十字链表存储结构。其中,m、n分别表示矩阵行数和列数;i, j为非零元素行号和列号。编写算法,实现矩阵转置,输出转置后的三元组到...

    十字链表在电力系统潮流计算中的应用

    在计算过程中发现:如果采用通常的压缩数组存储方法,需要进行大量的修改工作。因此本文提出十字链表方法,将网络的拓扑结构与数值信息存于十字链表中,使其独立于计算,能保证数据的可重用性和灵活性。这种方法适用...

    szlb.zip_图十字链表

    关于图的十字链表存储,由于动态二维数组有上限,不能处理超过0x7fffffff的数据。因此需要占有资源更小的十字链表存储,但是其过于复杂;

    数据结构实验三(数组应用).pdf

    问题描述: (1) 用行逻辑链接顺序表或十字链表分别实现稀疏矩阵的压缩存储。 (2) 编程实现矩阵的转置运算和乘法运算(运用行逻辑链接顺序表或十字 链表作为存储结构) 。 问题的实现: (1)矩阵的创建: 1:...

    数据结构实践

    十字链表表示 OrLgraph 邻接多重表表示 AdjMgraph 图的联通性 无向图的生成树 DFSForest 有向图的强连通分量 DgComponent 最小生成树 Minitree 关节点 FindArtgraph 图的应用 拓扑排序 TSort 关键路径 ...

    数据结构习题答案(全部算法)严蔚敏版

    5.3 稀疏矩阵的十字链表存储 5.3.1 十字链表的组成 5.3.2 十字链表的有关算法 5.4 广义表 5.4.1 广义表的概念和特性 5.4.2 广义表的存储结构 5.4.3 求广义表的深度 5.4.4 广义表的输出 5.4.5 建立广义表的...

    数据结构(C语言版)

    7.2.3 十字链表 7.2.4 邻接多重表 7.3 图的遍历 7.3.1 深度优先搜索 7.3.2 广度优先搜索 7.4 图的连通性问题 7.4.1 无向图的连通分量和生成树 7.4.2 有向图的强连通分量 7.4.3 最小生成树 7.4.4 关节点和重连通分量 ...

    数据结构 c语言版

    7.2.3 十字链表 7.2.4 邻接多重表 7.3 图的遍历 7.3.1 深度优先搜索 7.3.2 广度优先搜索 7.4 图的连通性问题 7.4.1 无向图的连通分量和生成树 7.4.2 有向图的强连通分量 7.4.3 最小生成树 7.4.4 关节点和...

    数据结构(C语言版)[严蔚敏]

    7.2.3 十字链表 7.2.4 邻接多重表 7.3 图的遍历 7.3.1 深度优先搜索 7.3.2 广度优先搜索 7.4 图的连通性问题 7.4.1 无向图的连通分量和生成树 7.4.2 有向图的强连通分量 7.4.3 最小生成树 7.4.4 关节点和重连通分量 ...

    《数据结构》(C语言版)严蔚敏

    7.2.3 十字链表 7.2.4 邻接多重表 7.3 图的遍历 7.3.1 深度优先搜索 7.3.2 广度优先搜索 7.4 图的连通性问题 7.4.1 无向图的连通分量和生成树 7.4.2 有向图的强连通分量 7.4.3 最小生成树 7.4.4 关节点和重连通分量 ...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    78.9.1 动态存储方式与静态动态存储方式 120 8.9.2 auto变量 120 8.9.3 用static 声明局部变量 121 8.9.4 register 变量 122 用extern 声明外部变量 123 9 预处理命令 9.1 概述 124 9.2 宏定义 125 9.2.1 无参宏定义...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    78.9.1 动态存储方式与静态动态存储方式 120 8.9.2 auto变量 120 8.9.3 用static 声明局部变量 121 8.9.4 register 变量 122 用extern 声明外部变量 123 9 预处理命令 9.1 概述 124 9.2 宏定义 125 9.2.1 无参宏定义...

    2003年-数据结构.docx

    (×) 稀疏矩阵的压缩存储方法一般有三元组和十字链表两种。( ) 在AOE网中,一定有不止一条关键路径。(×) 二维数组是其数据元素为线性表的线性表。( ) 一个栈的输入序列是12345,则输出序列43512是可能的。...

    严蔚敏:数据结构题集(C语言版)

    7.2.3 十字链表 7.2.4 邻接多重表 7.3 图的遍历 7.3.1 深度优先搜索 7.3.2 广度优先搜索 7.4 图的连通性问题 7.4.1 天向图的连通分量和生成树 7.4.2 有向图的强连通分量 7.4.3 最小生成树 7.4.4 关节点和重连通分量 ...

    数据结构 严蔚敏 代码

    范例1-104 有向图的十字链表存储表示 335 ∷相关函数:CreateDG函数 1.7.4 无向图的邻接多重表存储表示 344 范例1-105 无向图的邻接多重表存储表示 344 ∷相关函数:CreateGraph函数 1.7.5 最小生成树 355 范例1-106...

    数据结构经典算法代码实现

    迪杰斯特拉算法求两点之间最短路径 堆排序 队列的循环和链式存储 二叉树及输出 广度优先搜索 赫夫曼编码 深度优先搜素 图的数组表示及普利姆算法 稀疏矩阵(三元组)及其转置 稀疏矩阵的十字链表 线索二叉树

    [数据结构(C语言版)].严蔚敏_吴伟民.高清扫描版.rar

    7.2.3 十字链表 7.2.4 邻接多重表 7.3 图的遍历 7.3.1 深度优先搜索 7.3.2 广度优先搜索 7.4 图的连通性问题 7.4.1 无向图的连通分量和生成树 7.4.2 有向图的强连通分量 7.4.3 最小生成树 7.4.4 关节点和重连通分量 ...

Global site tag (gtag.js) - Google Analytics