数据结构实训作业(III)

您所在的位置:网站首页 数组循环右移k位 数据结构实训作业(III)

数据结构实训作业(III)

2024-07-11 01:11| 来源: 网络整理| 查看: 265

数据结构实训作业(III)

于2020年10月13日2020年10月13日由Sukuna发布

第一关

本关任务:编写一个算法,将数组A中的n个元素A[0]至A[n-1]循环右移k位。要求算法时间复杂度为O(n),空间复杂度为O(1)

这一关的写出来不难,但是想出好的过程很难,这里就是对数组进行调换,因为我们发现循环之后数组分成两部分,类似于快速排序的分划结果,这个时候我们会思考可不可以用两部分颠倒的的思想来做

代码语言:javascript复制void reverse(ElemType a[],int s,int e) { int temp; while(s < e) { temp = a[s]; a[s] = a[e]; a[e] = temp; s++; e--; } } void ShiftRightCircular(ElemType *A,int n,int k) { /************** begin *****************/ if(k >= n) k = k%n; if(k > 0){ reverse(A,0,n-k-1); reverse(A+(n-k),0,k-1); reverse(A,0,n-1); } if(k < 0){ reverse(A,0,-k-1); reverse(A+(n+k),0,-k-1); reverse(A,0,n-1); } /************** end *****************/ }

第二关

矩阵加法,矩阵的形式是三元组顺序表

我先写个函数,表示矩阵的插入(往后插),接着就对A和B进行遍历,如果行列值不一样,就插入行列值较少的数,i和j是两个数据指针,指向目前遍历的位置,插入A就i后移,插入B就B往后移,以此类推(行列相等就判断相加是否为0,最后i和j都要加)

代码语言:javascript复制void EnterTriple(TSMatrix *Q,int row,int col,int e) { Q->tu++; Q->data[Q->tu].i=row; Q->data[Q->tu].j=col; Q->data[Q->tu].e=e; } TSMatrix ADD(TSMatrix A,TSMatrix B) //返回矩阵A、B相加的结果 { /************** begin *****************/ TSMatrix C; for(int i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3