`
jaychang
  • 浏览: 728214 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

十字链表定义创建查找

J# 
阅读更多
#include<iostream>
#define TRUE 1
#define FALSE 0
#define MAX 999
using namespace std;

//十字链表的元素定义
typedef struct OLNode{
  OLNode *right;
  OLNode *down;
  int iIndex,jIndex,value;
}OLNode,*OLink;

//十字链表的定义
typedef struct CrossList{
  OLink rhead[MAX+1],chead[MAX+1];
  int m,n,len;
}CrossList;


//创建十字链表
void CreateCrossList(CrossList *M)
{
  int m,n,len,k;
  cout<<"输入十字链表的行数,列数,元素个数\n";
  cin>>m>>n>>len;
  M->m=m;M->n=n;M->len=len;
  //每行每列头指针初始为空
  for(k=1;k<=M->m;k++) M->rhead[k]=NULL;
  for(k=1;k<=M->n;k++ ) M->chead[k]=NULL;
  int row,col,value;
  //将元素插入到十字链表中
  for(cin>>row>>col>>value;row!=0;cin>>row>>col>>value)
  {
     OLNode *p=(OLNode*)malloc(sizeof(OLNode));
     p->iIndex=row;p->jIndex=col;
     p->value=value;
     OLNode *q1=M->rhead[row];
     //如果该行头指针为空,或者该行头指针指向元素的列标大于插入的列标
     if(q1==NULL||M->rhead[row]->jIndex>col){
        p->right=M->rhead[row];
        M->rhead[row]=p;
     }
     else{
     //寻找插入点
        for(;q1->right!=NULL&&q1->right->jIndex<col;q1=q1->right);
           p->right=q1->right;q1->right=p;
      }
     q1=M->chead[col];
     if(q1==NULL||M->chead[col]->iIndex>row){
        p->down=M->chead[col];
        M->chead[col]=p;
     }
     else{
        for(;q1->down!=NULL&&q1->down->iIndex<row;q1=q1->down);
            p->down=q1->down;q1->down=p;
      }
  }
}

//输出十字链表的内容
void PrintCrossList(CrossList *M)
{
  int rowLength=M->m,currentRow=1;
  for(int row=1;row<=rowLength;row++)
  {
    OLNode *p=M->rhead[row];
    while(p!=NULL)
    {
      cout<<p->value<<" ";
      p=p->right;
    }
    cout<<"\n";
  }
}

//查找i行,j列元素的值,找不到返回-1
int FindNode(CrossList *M,int i,int j)
{   
  if(i>M->m||i<=0||j>M->n||j<=0){
     cout<<"不存在该元素\n";
     return -1;
  }
  OLNode *p=M->rhead[i];
  for(;p!=NULL&&p->jIndex<j;p=p->right);
    if(p==NULL||p->jIndex>j) return 0;
  return p->value;
}

int main()
{
  char cmd;
  int i,j;
  do{
     CrossList *M=(CrossList*)malloc(sizeof(CrossList));
     CreateCrossList(M);
     PrintCrossList(M);
     cout<<"查找某一元素的值,请输入i,j\n";
     cin>>i>>j;
     cout<<"元素的值为\n";
     cout<<FindNode(M,i,j)<<"\n";
     cout<<"Y/y继续\n";
     cin>>cmd;
  }while(cmd=='Y'||cmd=='y');
  return 0;
}
 
分享到:
评论

相关推荐

    十字链表MFC

    在MFC中,我们可以创建自定义的类来实现十字链表,例如,可以继承CObject类作为基础,并添加所需的数据成员和成员函数。MFC的容器类如CList、CMap等也可以辅助实现链表的操作,例如存储和查找元素。 4. 州哥大作业...

    C语言实现十字链表 数据结构

    在C语言中,创建十字链表节点需要定义一个结构体,包含四个指针和数据部分: ```c typedef struct Node { int data; // 存储元素 struct Node* up; // 指向上方的节点 struct Node* down; // 指向下方的节点 ...

    C++语言 十字链表

    在C++中实现十字链表,通常会涉及指针操作、节点定义、链表操作以及可能的模板类设计,以提供泛型编程的能力。 首先,我们来看C++中的模板类。模板是C++中的一项重要特性,它允许我们编写通用的代码,适用于不同...

    十字链表存储稀疏矩阵算法(乘法)

    十字链表是一种常见的稀疏矩阵存储方式,尤其适用于表示非零元素分布不均匀的情况。本问题主要讨论如何使用十字链表来存储稀疏矩阵,并实现两个稀疏矩阵的乘法运算。 首先,我们来看十字链表的结构。十字链表由两...

    十字链表稀疏矩阵相加

    - 定义两个函数`CreateSMatix_OL(CrossList &M)`来创建十字链表存储的稀疏矩阵。 - 输入矩阵的行数、列数和非零元素个数。 - 根据输入的信息逐个插入非零元素。 **输出稀疏矩阵**: - 设计函数输出稀疏矩阵,只需...

    图的十字链表代码(C语言)

    十字链表结合了邻接矩阵和邻接表的优点,不仅节省了空间,还提高了查找效率。每个顶点都有两个链表:一个指向所有进入该顶点的边(入边),另一个指向所有从该顶点出发的边(出边)。这样的设计使得对任意一个顶点的...

    数据结构中十字链表的C语言实现

    主要内容包括:十字链表的基本概念、十字链表在C语言中的实现方式、创建十字链表的过程、打印十字链表的方法以及两个十字链表相加的算法。 ### 十字链表基本概念 十字链表是一种特殊的链表形式,它主要用于稀疏...

    十字链表的C++实现

    十字链表是一种特殊的图数据结构,它用于存储稀疏图,即边的数量远小于顶点数量的图。这种数据结构可以高效地进行邻接顶点的查找和操作。在这个问题中,我们有四个文件,它们共同实现了十字链表的数据结构及其相关...

    十字链表-稀疏矩阵 C++ 代码

    根据给定文件的信息,我们可以总结出以下关于“十字链表-稀疏矩阵 C++ 代码”的相关知识点: ### 一、基础知识概述 #### 1.1 十字链表概念 十字链表是一种特殊的链表结构,每个节点不仅包含指向同一行其他节点的...

    数组的应用算法十字链表法

    十字链表法是一种高效处理稀疏矩阵的存储结构,它结合了行链表和列链表的优势,使得在稀疏矩阵中的非零元素查找、插入和删除操作更加便捷。稀疏矩阵是指大部分元素为零的矩阵,对于这类矩阵,使用十字链表可以节省...

    matrix-c.zip_稀疏矩阵 十字链表

    在C语言中实现十字链表稀疏矩阵,我们需要定义以下结构体: 1. `Node` 结构体:表示链表节点,包含元素值、行索引、列索引和指向相邻节点的指针。 2. `SparseMatrix` 结构体:表示整个稀疏矩阵,包括非零元素的数量...

    C#十字链数据结构

    在C#中实现十字链,我们需要定义一个节点类,包含四个指针,分别表示上、下、左、右的相邻节点。代码示例如下: ```csharp public class Node { public int Value; public Node Up; public Node Down; public ...

    数据结构 采用十字链表表示稀疏矩阵

    然而,三元组顺序表在查找、插入和删除操作上效率较低,因此引入了十字链表作为更优的存储结构。十字链表由两个方向的链接组成,横向链接连接同一行的非零元素,纵向链接连接同一列的非零元素。这种结构使得对矩阵的...

    数据结构 十字链 C#

    在C#中实现十字链,首先需要定义一个节点类,该类包含四个指针以及存储的数据。节点类的代码可能如下: ```csharp public class Node { public int Value; public Node Left; public Node Right; public Node ...

    稀疏矩阵 加、乘、转置

    1. 创建一个新的十字链表,用于存储转置后的矩阵。 2. 遍历原始矩阵中的所有非零元素。 3. 对于每一个非零元素(a, b, value),在新链表中创建一个节点(b, a, value)。 4. 将这些节点按照行号和列号的顺序插入到新的...

    C语言课程设计(C语言 双十字交叉链表 科技成果信息管理系统)

    例如,`create_cross_list()`函数用于创建双十字交叉链表,`save_cross_list()`用于保存链表到文件,`load_cross_list()`用于从文件加载链表,`traverse_cross_list()`用于遍历链表并显示信息,而其他函数如`search_...

    ShiZiLianBiao.zip

    - 查找路径:通过十字链表查找两个顶点间的路径。 - 打印图:输出图的结构,便于理解和调试。 在C语言实现中,这些操作通常通过函数完成,例如`add_vertex()`, `add_edge()`, `remove_vertex()`, `remove_edge()`, ...

    稀疏矩阵(C语言)

    为了解决这个问题,我们可以采用稀疏矩阵的表示方法,主要有两种常见的实现:三元组存储法和十字链表。 **三元组存储法** 三元组存储法是一种将非零元素以三元组(行号,列号,值)的形式存储的方法。通常,这些...

    景点查询链表

    景点查询链表是一种高效的数据结构,它利用了十字链表(Cross-Linked List)的特点来组织和管理景点信息。在IT行业中,数据结构是解决实际问题的基础,它们直接影响到程序的运行效率和内存使用。本篇文章将深入探讨...

    C语言数据结构各种程序源代码

    十字链表可以高效地处理非连续的元素,源码可能会展示如何创建、插入、删除和遍历十字链表节点。 7. **顺序表**:顺序表是一种用一维数组存储数据的数据结构,元素按线性顺序排列。在C语言中,顺序表的源码可能包含...

Global site tag (gtag.js) - Google Analytics