提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、综合应用题
  • 总结

前言

提示:这里可以添加本文要记录的大概内容:


提示:以下是本篇文章正文内容,下面案例可供参考

一、综合应用题

  1. 设数组A[0,…,n-1]的n个元素中有多个零元素,设计一个算法,将A中所有的非零元素依次移动到A数组的前端

    void move(int A[], int n){int i = -1, j, temp;for(j = 0; j<n; j++){if(A[j] != 0){i++;if(i != j){temp = A[i];A[i] = A[j];A[j] = temp;}}}
    }
    
  2. 关于浮点型数组 A[0,…,n-1],试设计实现下列运算的递归算法

    • 求数组A中的最大值。

      float findmax(float A[], int i, int j){if(i == j){return A[i];}return A[i] > findmax(A, i+1, j)? A[i]: findmax(A, i+1, j);
      }
      
    • 求数组中n个数之和

      float sum(float A[], int i, int j){if(i == j){return A[i];}return A[i] + sum(A[i], i+1, j);
      }
      
    • 求数组中n个数的平均值

      float avg(float A[], int i, int j){if(i == j){return A[i];}return (A[i] +(j-i) * avg(A, i+1, j)) / (j-i+1);
      }
      
  3. 试设计一个算法,将数组 A[0,…,n-1]中 所有奇数移到偶数之前。要求不另增加存储空间,且时间复杂度为O(n)

    void divide(int A[], int n){int i = 0, j = n - 1, temp;while(i<j){while(i<j && A[i]%2 == 1){ 找第一个偶数i++;}while(i<j && A[j]%2 == 0){    找最后一个奇数j--;}if(i<j){temp = A{i];A[i] = A{j];A[j] = temp;i++;j--;}}
    }
    
  4. 设有一元素为整数的线性表L,存放在一维数组A[0,…,n-1]中,设计一个算法,以A[n-1]为参考量,将该 数组分为左右两个部分 ,其中左半部分的元素值均小于等于A[n-1],右半部分的元素值均大于A[n-1],A[n-1]则位于这两部分之间要求结果仍存放在数组A中

    快排划分

    void divide(int A[], int n){int temp;int i = 0, j = n - 1;temp = A[i];A[i] = A[j];A[j] = temp;temp = A[i];  相当与把n-1位置元素放到0位置上,仍以0位置元素为参考量while(i!=j){while(i<j && A[j]>temp)  后往前 找第一个比temp小的数j--;if(i<j){A[i] = A[j];i++;}while(i<j && A[i]<temp){ 前往后 找第一个比temp大的数j++if(i<j){A[j] = A[i];j--;}}A[i] = temp;
    }
    
  5. 设计一个算法,对给定的一个整型m×nm×nm×n矩阵A,统计这个矩阵中具有下列特征的元素个数并输出它们的坐标及数值:它们既是所在行中的最小值,又是所在列中的最小值;或者它们既是所在行中的最大值,又是所在列中的最大值。假设矩阵中元素各不相同,要求结果在处理过程中用输出语句输出

    三重循环
    第一重 第二重:行最小
    第三重:列最小

    void printmin(int A[][maxSize], int m, int n){int i, j, k, min, minIndex;int flag;for(i = 0; i<m; i++){min = A[i][0];minIndex = 0;for(j = 0; j<n; j++){if(A[i][j] < min){min = A[i][j];minIndex = j;}flag = 1;for(k = 0; k<m; k++){if(min>A[k][minIndex]){flag = 0;break;}}if(flag)cout<<min<<",["<<i<<","<<minIndex<<"]"<<" ";}cout<<end;}
    }void printmax(int A[][maxSize], int m, int n){int i, j, k, max, maxIndex;int flag;for(i = 0; i<m; i++){max = A[i][0];maxIndex = 0;for(j = 0; j<n; j++){if(A[i][j] > max){max = A[i][j];maxIndex = j;}flag = 1;for(k = 0; k<m; k++){if(max<A[k][maxIndex]){flag = 0;break;}}if(flag)cout<<max<<",["<<i<<","<<maxIndex<<"]"<<" ";}cout<<end;}
    }
    
  6. 简要介绍稀疏矩阵的三元组存储结构特点,并实现稀疏矩阵的基本操作。

    1. 给定稀疏矩阵A(int型),创建其三元组存储结构B

        三元组存储结构是一种顺序结构,是顺序表。表中每个结点对应稀疏矩阵的一个非零元素,其中包括3个字段,分别为该元素的值,行下标和列下标。
        用第0行的第1个元素存储矩阵中非零元素的个数,第0行的第2个元素存储矩阵的行数,第0行的第3个元素存储矩阵的列数

      void create(int A[][maxSize], int m, int n, int B[][3]){int i, j;, k = 1;for(i = 0; i<m; i++){for(j = 0; j<n; j++){if(A[i][j] != 0){B[k][0] = A[i][j];        值B[k][1] = i;          行标B[k][2] = j;         列标}}}
      }
      
    2. 查找给定元素x是否在矩阵中。

      int search(int B[][3], int x){int i, t;t = B[0][0];   非零元素个数i = 1;while(i<t && B[i][0]!=x){i++;}if(i<=t){return 1;}else{return 0;}
      }
      
  7. 假设稀疏矩阵A采用三元组表示,编写一个函数,计算其转置矩阵B,要求B也采用三元组表示。

    两重循环 colSize×elemSizecolSize × elemSizecolSize×elemSize

    void transpose(int A[][3], int B[][3]){B[0][0] = A[0][0];B[0][1] = A[0][2];B[0][2] = A[0][1];int index = 1;if(B[0][0]>0){for(int col = 0; col<B[0][1]; col++){for(int j = 1; j<=B[0][0]; j++){if(A[j][2] == col){B[index][0] = A[j][0];B[index][1] = A[j][2];B[index][2] = A[j][1];}}}}
    }
    
  8. 假设稀疏矩阵A和B(两矩阵行列数对应相等)都采用三元组表示,编写一个函数,计算C=A+B,要求C也采用三元组表示,所有矩阵均为int型。

    注意 相加可能为0

    void add(int A[][3], int B[][3], int C[][3]){int i=1, j=1, k=1, m;while(i<=A[0][0] && j<=B[0][0]){if(A[i][1] == B[j][1]){if(A[i][2] < B[j][2]){C[k][0] = A[i][0];C[k][1] = A[i][1];C[k][2] = A[i][2];k++;i++;}else if(A[i][2] > B[j][2]){C[k][0] = B[j][0];C[k][1] = B[j][1];C[k][2] = B[j][2];k++;j++;}else{m = A[i][0] + B[j][0];if(m!=0){C[k][0] = m;C[k][1] = A[j][1];C[k][2] = A[j][2];k++;}i++;j++;}}else if(A[i][1] < B[j][1]){C[k][0] = A[i][0];C[k][1] = A[i][1];C[k][2] = A[i][2];k++;i++;}else{C[k][0] = B[j][0];C[k][1] = B[j][1];C[k][2] = B[j][2];k++;j++;}}while(i<=A[0][0]){C[k][0] = A[i][0];C[k][1] = A[i][1];C[k][2] = A[i][2];k++;i++;}while(j<=B[0][0]){C[k][0] = B[j][0];C[k][1] = B[j][1];C[k][2] = B[j][2];k++;j++;}C[0][0] = k - 1;C[0][1] = A[0][1];C[0][2] = A[0][2];
    }
    
  9. 假设稀疏矩阵A和B(分别为m×nm×nm×n和n×kn×kn×k矩阵)采用三元组表示,编写一个函数,计算C=A×BC=A×BC=A×B,要求CCC也是采用三元组表示的稀疏矩阵。

    int getValue(int D[][maxSize], int i, int j){int k = 1;while(k<=D[0][0] && (D[k][1] != i || D[k][2] != j))k++;if(k<=D[0][0])return D[k][0];elsereturn 0;
    }
    void mul(int A[][3], int B[][3], int C[][3], int m, int n, int k){int i, j, l, p=1, s;for(i = 0; i<m; i++){for(j = 0; j<k; j++){s = 0;for(l = 0; l<n; l++){s += getValue(A, i, l) * getValue(B, l, j);if(s != 0){C[p][0] = s;C[p][1] = i;C[p][2] = j;p++;}}}}C[0][0] = p-1;C[0][1] = m;C[0][2] = k;
    }
    

总结

提示:这里对文章进行总结:

天勤2022数据结构(四)数组、矩阵与广义表相关推荐

  1. 天勤2022数据结构(六)图

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 天勤2022数据结构(六)图 前言 一.基础算法 例题 Prim算法 Kruskal算法 Dijkstra算法 Floyd算法 拓扑排 ...

  2. 2022天勤考研数据结构笔记 第2章 线性表

    2022天勤考研数据结构笔记 第2章 线性表(更新中) 第2章 线性表 2.1 结构体定义 2.2 顺序表 2.3 单链表 2.4 双链表 2.5 循环链表 2.6 逆置问题(408重要考点) 第2章 ...

  3. “数组、矩阵与广义表”学习提纲

    文章目录 前言 数组 多维数组的存储方式 矩阵 常见的特殊矩阵 对称矩阵的压缩存储计算 三角矩阵的压缩存储计算 三对角矩阵的压缩存储计算 稀疏矩阵的压缩存储方式 广义表 广义表的属性 广义表的存储方式 ...

  4. 数据结构(C语言)-广义表

    广义表 一.广义表的定义和运算 1.广义表的定义 2.广义表的性质 二.广义表的存储 1.头尾表示法 2.孩子兄弟表示法 广义表是线性表的推广,也称为列表(Lists).线性表中的元素仅限于单个数据元 ...

  5. 18版考研数据结构天勤课后习题代码-数组、矩阵与广义表【完】

    #include <iostream> using namespace std; #define maxSize 101 /* //把非零元素移动到数组前端  天勤P122(二)1 voi ...

  6. 第五章 数组、矩阵与广义表

  7. 数据结构:串、数组和广义表

    串 线性结构:线性表.栈和队列.串与数组和广义表 串的逻辑结构和线性表极为相似,区别仅在于串的数据对象限定为字符集.在基本操作上,串和线性表有很大差别.线性表的基本操作主要以单个元素作为操作对象,如查 ...

  8. 数据结构串、数组和广义表

    整本书的知识点,点击右方链接:整本书笔记知识点 文章目录 四.串.数组和广义表 4.1.串的定义 4.2.案例引入 4.3.串的类型定义.存储结构及其运算 4.3.1.串的抽象类型定义 4.3.2.串 ...

  9. 【Leetcode 专题五】数组和哈希表

    目录 一.前言 二.解题思路和代码整理 2.1.数组重建 Leetcode283. 移动零 Leetcode27. 移除元素 Leetcode26. 删除有序数组中的重复项 2.2.数组双指针 Lee ...

  10. c语言数据结构大作业,数据结构大作业——树(和广义表)

    数据结构大作业--树(和广义表) 以广义表形式输入一棵树,然后以合适的比例将这棵树展示出来 (如何构造一个广义表已经略去) 对于广义表化的树,我们采用的树节点类似二叉链表形式的存储. 首先设计结点内容 ...

最新文章

  1. SAP零售:补货 Vs 多步骤补货
  2. Django框架(22.Django中设置session以及session对象及方法)
  3. DDR3布线的那些事儿(二)
  4. 安卓dts音频解码_DTS音效、解码、编码概念剖析
  5. 如何判断当前请求的API类型
  6. Java实现将日志信息存到TXT中
  7. [Mac入门]如何在Mac下显示Finder中的所有文件
  8. 支付宝沙箱环境下模拟下单流程
  9. 软工作业PSP与单元测试训练 15100231
  10. 每日一句 i'm by disposition one of life's neutrals,a human Switzerland
  11. PIC16F887 实战编程 单片机编程 基础实验教程
  12. js获取chrome浏览器版本信息
  13. 顺序栈基本操作代码实现
  14. Cesium 之实现房屋模型拆解
  15. 如何使用虚拟机运行“小HomeKit”智汀家庭云
  16. 零基础如何学习自动化测试
  17. C++ scanf()函数
  18. Unity:SLG游戏画线模块
  19. 最小的可重现示例Minimal reproducible example
  20. 电脑常用软件,让你的电脑更加便捷的黑科技软件

热门文章

  1. 一文掌握vscode远程调试python代码
  2. Android代码中获取Drawable对象
  3. 使用阿里云code和git管理项目
  4. 目标管理 - SMART原则
  5. 【Tomcat优化篇】如何让你的Tomcat性能更加优越
  6. 兼容西门子 CPU226IE量产方案
  7. MySQL 基本语法
  8. LACP链路聚合控制协议
  9. python输入两个坐标求距离_python计算两个地址之间的距离方法
  10. ubuntu系统配置i3wm窗口管理器