队列与多维数组例题

1、利用两个栈S1,S2模拟一个队列,如何利用栈的运算来实现队列的插入和删除运算?

//分析:队列是先进先出,假设top1为队列头指针,top2为队列尾指针。

1、插入
  void Insert(DaTaype x, SeqStack *S1,SeqStack *S2)
  {
    if (top2 == n) printf('满了');
    top2++;
    if (top2 > 0)
    {
      S2.data[top2] = x;
    }
    else
    {
      S1.data[top2] = x;
    }
  }
  
2、删除
  DataType Detele(SeqStack * S1, SeqStack * S2)
  {
    if (top1 > top2)
      printf('空了');
    if (top1 < 1)
      x = S1.data[top1];
    else
      x = S2.data[top];
    top1++;
    return x;
  }

设计一个算法,实现矩阵Amn的转置矩阵Bnm;

//分析:对于一个m×n的矩阵A,转置矩阵是一个n×m的矩阵B,而且B[i][j] == A[j][i];
//0<=i<=n-1;0<=j<=m-1; 假设m = 5, n = 8;
  void Trsmat(int a[][8], int b[][5], int n, int m)
  {
    int i, j;
    for (j = 0; j < m; j++)
    {
      for (i = 0; i < n; i++)
      {
        b[i][j] = a[j][i]
      }
    }
  }

写一个算法,建立顺序存储稀疏矩阵的三元组表

// 分析:假设A为一个稀疏矩阵,其数据存储在二维数组a中,b为一个存放对应与A的矩阵生成的三元组表,在这个算法中,要进行二重循环来判断每个矩阵元素是否为0,若不为0,则将其行,列下标及其值存入b中。
  void CreateTriTable(TSMatrix * b, int a[][5], int m, int n)
  {
    int i, j, k = 0;
    for (i = 0; i < m; i++)
    {
      for (j = 0; j < n; j++)
      {
        if (a[i][j] != 0) // 找出非零元素
        {
          b->data[k].i = i;       //记录非零元素行下标
          b->data[k].j = j;       //记录非零元素列下标
          b->data[k].v = a[i][j]; //保存非零值
          K++;                    // 统计非零数
        }
        b->m = m; // 记录矩阵行与列数
        b->n = n;
        b->t = k;
      }
    }
  }

写一个算法,实现三元组表结构存储的稀疏矩阵的转置运算

 void TransMatrix(TSMatrix a, TSMatrix * b)
  {
    int p, q, col;
    b->m = s.n;
    b->n = a.m;
    b->t = a.t;
    if (b->t <= 0)
    {
      printf('m中无非零元素')
    }
    else
    {
      q = 0;
      for (col = 0; col < count; ++col)
      {
        for (p = 0; p < count; p++)
        {
          if (a.data[p].j == col)
          {
            b->data[q].i = a.data[p].j;
            b->data[q].j = a.data[p].i;
            b->data[q].v = a.data[p].v;
            ++q;
          }
        }
      }
    }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值