杨氏矩阵的增删改查

2023-11-25 03:08
文章标签 矩阵 改查 增删 杨氏

本文主要是介绍杨氏矩阵的增删改查,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

杨氏矩阵一左上角斜着往下看可以使小顶堆的树

 #include<iostream>
#define INFINITY 100000
using namespace std;
class CYoungTableau
{
private:
   int m_nRow;
   int m_nCol;
   int **m_pData;


public:


CYoungTableau(int row, int col);
~CYoungTableau();
void Init(int row, int col);
void Destory();
bool Insert(int x);
    bool Insert2(int x);
void Delete(int row, int col);
bool Find(int x, int&row, int&col) const;
void Print() const;
};


CYoungTableau::CYoungTableau(int row, int col)
{
   Init(row, col);
}


CYoungTableau::~CYoungTableau()
{
   Destroy();
}


/*****************插入方法1,一行插完再插另一行*********************/
bool CYoungTableau::Insert(int x)
{
  int row=m_nRow-1;
  int col=m_nCol-1;
  if(m_pData[row][col]<INFINITY)//杨氏矩阵已满,因为右下角不是无穷而是数
 return false;
  m_pData[row][col]=x;
  int r=row;
  int c=col;                     //从右下角往左上角找
  while((row>=0)|| (col>=0))
  {
     if((row>=1)&&(m_pData[row-1][col]>m_pData[r][c]))
{
   r=row-1;
c=col;
}
if((col>=1)&&(m_pData[row][col-1]>m_pData[r][c]))//不能用else。这里先和上边比,比完后再拿上边和左边比,左边大于上边和左边换,避免(17,19;20,'INFINITY ';)插入20;
{
   r=row;                                        //上左都大于该数,则选择与较大的换,若换较小的可能出错。
c=col-1;
}
if((r==row)&&(c==col))
break;
swap(m_pData[row][col],m_pData[r][c]);
row=r;
col=c;
  }
  return true;
}


/*****************插入方法2,优先插入逆对角线左上部插入*********************/
bool IsBig(int a, int b)
{
  if( rand()%2==0) //有%50的概率为>=,有%50的概率为>。
 return a>=b;
  return a>b;
}


bool CYoungTableau::Insert2(int x)
{
  int row=m_nRow-1;
  int col=m_nCol-1;
  if(m_pData[row][col]<INFINITY)
 return false;
  m_pData[row][col]=x;
  int r=row;
  int c=col;
  while((row>=0)||(col>=0))
  {
     if((row>=1)&&m_pData[row-1][col]>m_pData[r][c])
{
   r=row-1;
c=col;
}
if((col>=1) && IsBig(m_pData[row][col-1],m_pData[r][c])) 
{
  r=row;
  c=col-1;
}
if((r==row)&&(c==col))
break;
swap(m_pData[row][col],m_pData[r][c]);
row=r;
col=c;
  }
  return true;
}


bool CYoungTableau::Find(int x, int& row, int &col) const
{
   row=0;
   col=m_nCol-1;
   while((row<m_nRow) && (col>=0))
   {
      if(m_pData[row][col]==x)
 return true;
 if(x>m_pData[row][col])
 row++;
 else
 col--;
   }
   return false;
}


void CYoungTableau::Delete(int row, int col)
{
   int r=row;
   int c=col;
   while((row<m_nRow)&&(col<m_nCol))
   {
      if(m_pData[row][col]==INFINITY)
 break;
 if(row+1<m_nRow)
 {
    r=row+1;
c=col;
 }
 if((col+1<m_nCol) && (m_pData[row][col+1]<m_pData[r][c]))//删除数的下边和右边相比谁小,用谁替换
 {
    r=row;
c=col+1;
 }
 if((row==r)&&(col==c))
 break;
 m_pData[row][col]=m_pData[r][c];
 row=r;
 col=c;
   }
   m_pData[m_nRow-1][m_nCol-1]=INFINITY;
}

这篇关于杨氏矩阵的增删改查的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/423021

相关文章

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

MybatisX快速生成增删改查的方法示例

《MybatisX快速生成增删改查的方法示例》MybatisX是基于IDEA的MyBatis/MyBatis-Plus开发插件,本文主要介绍了MybatisX快速生成增删改查的方法示例,文中通过示例代... 目录1 安装2 基本功能2.1 XML跳转2.2 代码生成2.2.1 生成.xml中的sql语句头2

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

08 增删查功能

划重点: lable 标签keyup:键盘事件标签内添加样式:style使用事件修饰符:preventforEach :遍历 数组indexOf: 可以返回要查询的某个字符串值在整个字符串中首次出现的位置下标findIndex:返回传入一个测试条件(函数)符合条件数组的首个元素的位置splice:向/从数组中添加/删除项目,然后返回被删除后的新的项目数组 黑椒蟹 一对: <!DOCTYPE

线性代数|机器学习-P35距离矩阵和普鲁克问题

文章目录 1. 距离矩阵2. 正交普鲁克问题3. 实例说明 1. 距离矩阵 假设有三个点 x 1 , x 2 , x 3 x_1,x_2,x_3 x1​,x2​,x3​,三个点距离如下: ∣ ∣ x 1 − x 2 ∣ ∣ 2 = 1 , ∣ ∣ x 2 − x 3 ∣ ∣ 2 = 1 , ∣ ∣ x 1 − x 3 ∣ ∣ 2 = 6 \begin{equation} ||x