稀疏矩阵应用(加法、乘法、转置)

要求用C++编写
实现三元组,十字链表下的稀疏矩阵的加、转、乘的实现。
(1)稀疏矩阵的存储
(2)稀疏矩阵加法
(3)矩阵乘法
(4)矩阵转置

求各位大神指点!!!求源代码,最好有注释

c++

3个回答

表示我们只用C语言写过这个东西

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
稀疏矩阵的快速转置问题

冒昧的引用下大神的代码: 说明:m为行数,n为列数,t为非零元素的个数 template<class T> void SeqTriple<T>::Transpose(SeqTriple<T>& B) const //将转置后的矩阵赋给B { int *num=new int[n]; //为num和k数组分配空间 int *k=new int [n]; B.m=n; B.n=m; B.t=t; if(t>0) { for(int i=0; i<n; i++) num[i]=0;//初始化num为0 for(int i=0; i<t; i++) num[trip[i].col]++; //计算num k[0]=0; for(int i=1; i<n; i++) k[i]=k[i-1]+num[i-1]; //计算k for(int i=0; i<t; i++) //扫描this对象的三元组表 { int j=k[trip[i].col]++; //求this对象的第i项在新三元组B中的位置j B.trip[j].row=trip[i].col; //将this对象的第i项转置到B的位置j B.trip[j].col=trip[i].row; B.trip[j].value=trip[i].value; } } delete [] num; delete [] k; } 虽然明白num和k数组的作用,但是: 1.num的算法是怎么回事? 即这段代码: for(int i=0; i<t; i++) num[trip[i].col]++; 2.k的计算方法是怎么得到的? 即这段代码: k[i]=k[i-1]+num[i-1] 虽然有代数验证,但是书上没写- - 3.在执行完这两步骤后,接下来的步骤是怎么样的? 即扫描this对象的三元组表那里开始就看不大懂... 求大神指点迷津啊!!! 万分感激!!!

请问这个稀疏矩阵转置的代码哪组测试数据不对??我没有测试出来。

![图片说明](https://img-ask.csdn.net/upload/201511/08/1446950897_975177.png) ``` #include<stdio.h> #define MAX_SIZE 100 #define OK 1 #define ERROR -1 typedef int ElemType; typedef int Status; typedef struct { int i, j; ElemType e; }Triple; typedef struct { Triple data[MAX_SIZE]; int mu, nu, tu; }TSMatrix; Status creatSMatrix(TSMatrix &M) { int row, col, k = 0; scanf("%d %d", &M.mu, &M.nu); for(row = 1; row <= M.mu; row++) { for(col = 1; col <= M.nu; col++) { scanf("%d", &M.data[k].e); if(M.data[k].e) { M.data[k].i = row; M.data[k].j = col; k++; } } } M.tu = k; // printf("k = %d\n", k); return OK; } Status printfMatrix(TSMatrix M) { int row, col, temp, k = 0; // printf("T.mu=%d T.nu=%d\n", M.mu, M.nu); for(row = 1; row <= M.mu; row++) { for(col = 1; col <= M.nu; col++) { if(row == M.data[k].i && col == M.data[k].j) { printf("%d ", M.data[k].e); k++; } else printf("0 "); } printf("\n"); } } Status transportSMatrix(TSMatrix M, TSMatrix &T) { int col, p, k = 0; T.mu = M.nu; T.nu = M.mu; T.tu = M.tu; for(col = 1; col <= M.nu; col ++){ for(p = 0; p < M.tu; p ++){ if(col == M.data[p].j) { T.data[k].i = M.data[p].j; T.data[k].j = M.data[p].i; T.data[k].e = M.data[p].e; k ++; } } } // printf("M.data[1].j=%d k = %d\n", M.data[1].j, k); } Status destoryMatrix(TSMatrix &M){ M.mu = M.nu = M.tu = 0; } int main() { TSMatrix M, T; creatSMatrix(M); transportSMatrix(M, T); printfMatrix(T); destoryMatrix(M); return 0; } ```

求各位大神帮我看看这个稀疏矩阵应用的C++代码

#include<stdio.h> #include<stdlib.h> #include<malloc.h> #define MAXSIZE 100 int num[100]; typedef struct OLNode{ int i,j; int e; struct OLNode *right,*down; }OLNode,*OLink; typedef struct { int mu,nu,tu; OLink *rhead,*chead; }CrossList; int CreateSMatix_OL(CrossList &M){ int i,j,e; OLink q; OLink p; printf("请输入稀疏矩阵的行数,列数,非零元素的个数:\n"); scanf("%d%d%d",&M.mu,&M.nu,&M.tu); M.rhead=(OLink *)malloc((M.mu+1)*sizeof(OLNode)); M.chead=(OLink *)malloc((M.nu+1)*sizeof(OLNode)); for( i=1; i<=M.mu; i++)M.rhead[i]=NULL; for( i=1; i<=M.nu; i++)M.chead[i]=NULL; printf("请输入元素的行 列 值。最后输入0 0 0为结束\n"); scanf("%d%d%d",&i,&j,&e); while(i!=0){ p=(OLink)malloc(sizeof(OLNode)); p->i=i; p->j=j; p->e=e; if(M.rhead[i]==NULL||M.rhead[i]->j>j){p->right=M.rhead[i]; M.rhead[i]=p; } else{ q=M.rhead[i]; while(q->right&&q->right->j<j)q=q->right; p->right=q->right; q->right=p; } if(M.chead[j]==NULL||M.chead[j]->i>i){p->down=M.chead[j]; M.chead[j]=p; } else{ q=M.chead[j]; while(q->down&&q->down->i<i)q=q->down; p->down=q->down; q->down=p; } scanf("%d%d%d",&i,&j,&e); } return 1; }//创建十字链表 int Compare(int a1,int b1,int a2,int b2){ if(a1>a2)return 1; else if(a1<a2)return -1; else if(b1>b2)return 1; if(b1<b2)return -1; else return 0; } int SMatrix_ADD(CrossList *A,CrossList *B){ OLNode *pa,*pb,*pre,*p,*cp[100]; int i,j,t; t=A->tu+B->tu; for(j=1; j<=A->nu; j++)cp[j]=A->chead[j]; for(i=1; i<=A->mu; i++){ pa=A->rhead[i]; pb=B->rhead[i]; pre=NULL; while(pb) { if(pa==NULL||pa->j>pb->j) { p=(OLink)malloc(sizeof(OLNode)); if(!pre)A->rhead[i]=p; else pre->right=p; p->right=pa; pre=p; p->i=i; p->j=pb->j; p->e=pb->e; if(!A->chead[p->j]){ A->chead[p->j]=cp[p->j]=p; p->down=NULL; } else{ cp[p->j]->down=p; cp[p->j]=p; } pb=pb->right; } else if(pa->j<pb->j){pre=pa; pa=pa->right; } else if(pa->e+pb->e) { t--; pa->e+=pb->e; pre=pa; pa=pa->right; pb=pb->right; } else { t=t-2; if(!pre)A->rhead[i]=pa->right; else pre->right=pa->right; p=pa; pa=pa->right; if(A->chead[p->j]==p)A->chead[p->j]=cp[p->j]=p->down; else cp[p->j]->down=p->down; free(p); pb=pb->right; } } } A->mu=A->mu>B->mu?A->mu:B->mu; A->nu=A->nu>B->nu?A->nu:B->nu; return 1; } //十字链表相加 int ShowMAtrix(CrossList *A){ int col; OLink p; for(col=1;col<=A->mu;col++) if(A->rhead[col]){p=A->rhead[col]; while(p){printf("%3d%3d%3d\n",p->i,p->j,p->e); p=p->right; } } return 1; } //十字链表显示 int MultSMatrix_OL(CrossList M, CrossList N, CrossList &Q) { int i, j, e; //中间变量 OLink p0, q0, p, pl, pla; //中间变量 //检查稀疏矩阵M的列数和N的行数是否对应相等 if(M.nu != N.mu) { printf ( "稀疏矩阵A的列数和B的行数不相等,不能相乘。\n" ); return 0; } Q.mu = M.mu, Q.nu = N.nu, Q.tu = 0; if(!(Q.rhead = (OLink *)malloc((Q.mu + 1) * sizeof(OLink)))) exit(-2); if(!(Q.chead = (OLink *)malloc((Q.nu + 1) * sizeof(OLink)))) exit(-2); for(i = 1; i <= Q.mu; i++) Q.rhead[i] = NULL; for(i = 1; i <= Q.nu; i++) Q.chead[i] = NULL; //稀疏矩阵相乘 for(i =1; i <= Q.mu; i++) for(j = 1; j <= Q.nu; j++) { p0 = M.rhead[i], q0 = N.chead[j], e = 0; while(p0&&q0) { if( p0->j > q0->i) q0 = q0->down; //M的列大于N的行,则N的列指针后移 if(p0->j < q0->i) p0 = p0->right; //M的列小于N的行,则M的行指针右移 else { e += p0->e * q0->e; q0 = q0->down, p0 = p0->right; //移动指针 } } if(e)//乘积不为0 { if(!(p = (OLink)malloc(sizeof(OLNode)))) exit(-2); Q.tu++; //非零元素增加 p->i = i, p->j = j, p->e = e, p->right = NULL, p->down = NULL; //赋值,指针后移 //将p插入十字链表 //行插入 if(Q.rhead[i] == NULL) //若p为该行的第1个结点 Q.rhead[i] = pl = p; //p插在该行的表头且pl指向p(该行的最后一个结点) else pl->right = p, pl = p; //插在pl所指结点之后,pl右移 //列插入 if(Q.chead[j] == NULL) //若p为该列的第一个点 Q.chead[j] = p; //该列的表头指向p else { pla = Q.chead[j]; //pla指向j行的第1个结点 while(pla->down) pla = pla->down; //pla指向j行最后一个结点 pla->down = p; } } } return 1; } }}//十字链表相乘 void TurnSMatrix_OL(CrossList &M) { int col,row; OLink p,q; for(col=1; col<=M.mu; col++) { q=p=M.rhead[col]; while(q){ row=p->i; p->i=p->j; p->j=row; q=p->right; p->right=p->down; p->down=q; } } }//十字链表转置 int DestroySMatrix_OL(CrossList &M) { int i; //中间变量 OLink p, q; //中间变量 if(!M.rhead || !M.chead) return 1; //M不存在 else {//M存在 if(M.chead)//所有列链表头指针置为空 for(i = 1; i <= M.nu; i++) M.chead[i] = NULL; if(M.rhead)//按行释放节点 for(i = 1; i <= M.mu; i++) { p = M.rhead[i]; while(p) { q = p, p = p->right; free(q); } } //释放行和列链表头指针指向基址 free(M.rhead); free(M.chead); //返回 return 1; } }//十字链表销毁 int main(){ int n,i; //TSMatrix M,T,S; CrossList MM,TT,SS; printf("请你选择操作:\n1:创建稀疏矩阵。\n2:退出\n(1|2):"); scanf("%d",&n); switch(n){ case 1:{CreateSMatix_OL(MM); ShowMAtrix(&MM); printf("已经选择创建稀疏矩阵,请选择操作\n 1:稀疏矩阵转置\n 2:稀疏矩阵相加\n 3:稀疏矩阵相乘\n 4:退出\n(1|2|3|4):"); scanf("%d",&i); switch(i){ case 1: TurnSMatrix_OL(MM); ShowMAtrix(&MM); break; case 2: printf("请你输入另一个稀疏矩阵:"); CreateSMatix_OL(TT); SMatrix_ADD(&MM,&TT); ShowMAtrix(&MM); break; case 3:printf("请你输入另一个稀疏矩阵:"); CreateSMatix_OL(TT); MultSMatrix_OL(MM,TT,SS); ShowMAtrix(&SS); break; case 4:exit(0); }}; break; case 2:exit(0); default :printf("erorr"); } } 编译没问题 但就是输出不了。有可能是十字链表显示那段代码出错

新人求助,对稀疏矩阵进行基本操作时进行两矩阵相加的最后一个输出始终出错?

#include<iostream> using namespace std; #define OK 1 #define ERROR 0 #define maxsize 100 typedef int Elemtype; typedef int Status; typedef struct { int i, j; Elemtype e; }Triple; typedef struct { Triple data[maxsize + 1]; int mu, nu, tu; }TSMatrix; Status CreateTriple(TSMatrix& T) { cout << " 请输入稀疏矩阵的行数,列数和非零元个数:" << endl; cin >> T.mu >> T.nu >> T.tu; cout << "请依次输入" << T.tu << "个元素所处的行数,列数和值:" << endl; for (int i = 1; i <= T.tu; i++) { cin >> T.data[i].i >> T.data[i].j >> T.data[i].e; } return OK; } Status TransposeTSMatrix(TSMatrix T, TSMatrix& Q) { Q.mu = T.nu; Q.nu = T.mu; Q.tu = T.tu; if (Q.tu) { int q = 1; for (int col = 1; col <= T.nu; col++) //col为列标 for (int p = 1; p <= T.mu; p++) if (T.data[p].j == col) { Q.data[q].i = T.data[p].j; Q.data[q].j = T.data[p].i; Q.data[q].e = T.data[p].e; q++; } }return OK; } Status AddTSMatrix(TSMatrix T, TSMatrix Q, TSMatrix& A) { if (T.mu != Q.mu || T.nu != Q.nu) { cout << "两矩阵行数或列数不相等,无法相加!" << endl; return ERROR; } A.mu = T.mu; A.nu = T.nu; A.tu = T.tu + Q.tu; int mtu = 1, ntu = 1, k = 1; int x; while (mtu <= T.tu && ntu <= Q.tu) { //若T的行数与Q的行数相同 if (T.data[mtu].i == Q.data[ntu].i) { if (T.data[mtu].j < Q.data[ntu].j) //若T的列标小于Q的列标 { A.data[k].i = T.data[mtu].i; // 将T中的非零元素赋给A A.data[k].j = T.data[mtu].j; A.data[k].e = T.data[mtu].e; k++; mtu++; } else if (T.data[mtu].j > Q.data[ntu].j) //若T的列标大于Q的列标 { A.data[k].i = Q.data[ntu].i; // 将Q中的非零元素赋给A A.data[k].j = Q.data[ntu].j; A.data[k].e = Q.data[ntu].e; k++; ntu++; } else { //若T的列标等于Q的列标 //当两矩阵某一位置行列相同且元素非零,则将两非零元素相加 x = T.data[mtu].e + Q.data[ntu].e; if (x != 0) { A.data[k].i = T.data[mtu].i; A.data[k].j = T.data[mtu].j; // 将T中的非零元素赋给A A.data[k].e = x; k++; } mtu++; ntu++; } } else if (T.data[mtu].i < Q.data[ntu].i) //若T的行标小于Q的行标相同 { A.data[k].i = T.data[mtu].i; A.data[k].j = T.data[mtu].j; // 将T中的非零元素赋给A A.data[k].e = T.data[mtu].e; k++; mtu++; } else //若T的行标大于Q的行标相同 { A.data[k].i = Q.data[ntu].i; // 将Q中的非零元素赋给A A.data[k].j = Q.data[ntu].j; A.data[k].e = Q.data[ntu].e; k++; ntu++; } } while (ntu < Q.tu) //当Q中有元素剩余时 { A.data[k].i = Q.data[ntu].i; // 将T中的非零元素赋给A A.data[k].j = Q.data[ntu].j; A.data[k].e = Q.data[ntu].e; k++; ntu++; } A.tu = k; //A(相加后的矩阵)的非零元素个数 return OK; } Status PrintTSMatrix(TSMatrix T) { cout << "稀疏矩阵的行数,列数及非零元个数为:" << T.mu << " " << T.nu << " " << T.tu << endl; cout << "矩阵中的非零元素为:" << endl; for (int i = 1; i <= T.tu; i++) { cout << "(" << T.data[i].i << "," << T.data[i].j << "," << T.data[i].e << ")" << endl; } return OK; } int main() { TSMatrix T, Q, A; int n; cout << "|-----------------------------|" << endl; cout << "|1------------创建一个稀疏矩阵|" << endl; cout << "|2------------------矩阵的转置|" << endl; cout << "|3----------------两个矩阵相加|" << endl; cout << "|-----------------------------|" << endl; cout << "请输入操作数:" << endl; cin >> n; if (n < 0 || n>3) { cout << "无效操作!请重新输入!" << endl; cin >> n; } else while (n > 0 && n < 4) { switch (n) { case 1: CreateTriple(T); cout << "构造稀疏矩阵完成!矩阵如下:" << endl; PrintTSMatrix(T); cout << "如需继续操作,请输入操作码:" << endl; cin >> n; break; case 2: cout << "请先输入待转置的矩阵:" << endl; CreateTriple(T); TransposeTSMatrix(T, Q); cout << "转置后的矩阵为:" << endl; PrintTSMatrix(Q); cout << "如需继续操作,请输入操作码:" << endl; cin >> n; break; case 3: cout << "请输待第一个稀疏矩阵:" << endl; CreateTriple(T); cout << "请输入第二个稀疏矩阵:" << endl; CreateTriple(Q); AddTSMatrix(T, Q, A); cout << "相加后的矩阵为:" << endl; PrintTSMatrix(A); cout << "如需继续操作,请输入操作码:" << endl; cin >> n; break; } } } ![图片说明](https://img-ask.csdn.net/upload/201911/17/1573962601_259153.png)

Java语言定义一个4x4的二维数组,然后从键盘输入16个数字构成矩阵,然后将转置矩阵输出出来

Java语言定义一个4x4的二维数组,然后从键盘输入16个数字构成矩阵,然后将转置矩阵输出出来 在线等

三元组法求矩阵的转置,并输出转置矩阵,出现如图的错误,为啥啊?求大神指点迷津

#include<stdio.h> //#include<stdlib.h> #define MAXSIZE 12500 #define ok 1 typedef int ElemType; typedef int status; typedef struct { int ru,cu; ElemType e; }Triple ; typedef struct { Triple data[MAXSIZE+1]; int m,n,t; }TSMatrix; status Transpose(TSMatrix M,TSMatrix T){ int q,col,p; T.m=M.n;T.n=M.m;T.t=M.t; if(T.t){ q=1; for(col=1;col<=M.n;col++) { for(p=1;p<=M.m;p++) { if(M.data[p].cu==col){ T.data[q].ru=M.data[p].cu; T.data[q].cu=M.data[p].ru; T.data[q].e=M.data[p].e; q++; } } } return ok; } void main() { int i,j,c,r; int a[10][10]; printf("请输入矩阵行数和列数\n"); scanf("%d %d",&r,&c); printf("请输入矩阵\n"); for(i=1;i<=r;i++) { for(j=1;j<=c;j++) { scanf("%d",&a[i][j]); } } TSMatrix M,T; M.m=r;M.n=c;M.t=1; for(i=1;i<=r;i++) { for(j=1;j<=c;j++) { if(a[i][j]) { M.data[M.t].ru=i; M.data[M.t].cu=j; M.data[M.t].e=a[i][j]; M.t++; } } } Transpose(M,T); int x=1,b[c][r]; for(i=1;i<=c;i++) for(j=1;j<=r;j++) { if(T.data[x].i==i&&T.data[x].j==j) { b[i][j]=T.data[x].e; x++; } else b[i][j]; } for(i=1;i<=r;i++) { for(j=1;j<=c;j++) printf("%d",b[i][j]); printf("\n"); } }![图片](https://img-ask.csdn.net/upload/201710/12/1507819652_454000.jpg)

Java语言,实现矩阵的转置的算法怎么实现,怎么按照行列输入矩阵?

Java语言,实现矩阵的转置的算法怎么实现,怎么按照行列输入矩阵?

请问能指点一下矩阵转置和矩阵相加吗?

我对矩阵的输入输出以及加减乘,转置,旋转的原理有些不明白,希望可以得到解答,谢谢!

矩阵转置:求解释为什么矩阵转置不成功,还是原来的矩阵

#include <iostream> using namespace std; const int row = 2; const int column = 2; void PrintMatrix(int m[][column]); void ReverseMatrix(int matrix[][column]); void main() { cout<<"请输入"<<(row * column)<<"个数字"<<endl; int matrix[row][column]; for(int i = 0; i < row; ++i) { for(int j = 0; j < column; ++j) { cin>>matrix[i][j]; } } PrintMatrix(matrix); ReverseMatrix(matrix); cout<<"转置后:"<<endl; PrintMatrix(matrix); } void PrintMatrix(int matrix[][column]) { for(int i = 0; i < row; i++) { for(int j = 0; j < column; j++) { cout<<matrix[i][j]<<" "; } cout<<endl<<endl<<endl; } } void ReverseMatrix(int matrix[][column]) { for(int i = 0; i < row; i++) { for(int j = 0; j < column; j++) { int temp = matrix[i][j]; matrix[i][j] = matrix[j][i]; matrix[j][i] = temp; } } } //求解释为什么矩阵转置不成功,还是原来的矩阵

在visual studio编写稀疏矩阵的过程中运行出现“0xC0000005: 读取位置 0x9A696484 时发生访问冲突。”怎么解决?

在稀疏矩阵的乘法运算过程中运行出现“0xC0000005: 读取位置 0x9A696484 时发生访问冲突。”情况,找了很久都没发现问题,编程小白寻求各位大神帮忙。 稀疏矩阵的乘法那块我是根据严蔚敏的数据结构改写的,出现了错误不知道如何修改。 以下为代码: ``` #include<stdio.h> #include<stdlib.h> #define _CRT_SECURE_NO_WARNINGS #pragma warning(disable:4996) #define MAXSIZE 100 typedef int DataType; typedef struct { int row, col; DataType value; }Triple; typedef struct { Triple data[MAXSIZE + 1]; int SqPos[10]; int mu, nu, tu; }SMaxtrix; SMaxtrix CreateSMaxtrix() //创建矩阵 { SMaxtrix M; int i; printf("请输入行数"); scanf_s("%d", &M.mu); //输入行数 printf("请输入列数"); scanf_s("%d", &M.nu); //输入列数 printf("请输入非0的个数"); scanf_s("%d", &M.tu); while (M.tu > M.mu*M.nu) { printf("输入错误,请重新输入\n"); scanf_s("%d", &M.tu); } for (i = 0; i < M.tu; i++) { printf("请按行序顺序输入第%d个非零元素所在的行(0~%d),""列(0~%d),元素值:(逗号分隔)\n", i, M.mu-1, M.nu-1); scanf_s("%d,%d,%d", &M.data[i].row, &M.data[i].col, &M.data[i].value); } return M; } void PrintM(SMaxtrix M) { int i; printf("\n %d行%d列%d个非零元素。\n", M.mu, M.nu, M.tu); printf("%4s %4s %8s\n", "row", "col", "value"); for (i = 0; i < M.tu; i++) { printf("%4d %4d %8d\n", M.data[i].row, M.data[i].col, M.data[i].value); } } SMaxtrix TransMatrix(SMaxtrix M) //矩阵转置 { SMaxtrix T; int rowsize[MAXSIZE]; int rowstart[MAXSIZE]; int i, j, k; T.mu = M.nu; T.nu = M.mu; T.tu = M.tu; if (T.tu > 0) { for (j = 0; j < M.nu; j++) rowsize[j] = 0; for (i = 0; i < M.tu; i++) { j = M.data[i].col; rowsize[j] = rowsize[j] + 1; } printf("\n rowsize[]:"); for (i = 0; i < M.nu; i++) printf(" %d ", rowsize[i]); printf("\n"); rowstart[0] = 0; for (j = 1; j < M.nu; j++) rowstart[j] = rowstart[j - 1] + rowsize[j - 1]; printf("\n rowstart[]:"); for (i = 0; i < M.nu; i++) printf("%d ", rowstart[i]); printf("\n"); for (i = 0; i < M.tu; i++) { j = M.data[i].col; k = rowstart[j]; T.data[k].row = M.data[i].col; T.data[k].col = M.data[i].row; T.data[k].value = M.data[i].value; rowstart[j] = rowstart[j] + 1; } } return T; } void MultSMaxtrix(SMaxtrix M, SMaxtrix Q)//稀疏矩阵乘法 { SMaxtrix N; int ctemp[MAXSIZE + 1]; int tp,p,brow=0,t,q,ccol; if (M.nu != Q.mu) printf("error"); N.mu = M.mu; N.nu = Q.nu; N.tu = 0;//矩阵N初始化 if (M.tu*Q.tu != 0)//N是非零矩阵 { for (int i = 1; i <= M.mu; i++)//处理M的每一行 { ctemp[0] = 0;//当前行个元素累加器清零 N.SqPos[i] = N.tu + 1; if (i < M.mu) tp = M.SqPos[i + 1]; else { tp = M.tu + 1; } for (p = M.SqPos[i]; p < tp; p++)//对当前行中每一个非零元 { brow = M.data[p].col;//找到对应元在N中的行号(编译后这里出现问题!!) if (brow < M.mu) t = Q.SqPos[brow + 1]; else { t = Q.tu + 1; } for (q = Q.SqPos[brow]; q < t; ++q) { ccol = Q.data[q].col;//乘积元素在N中列号 ctemp[ccol] += M.data[p].value * Q.data[p].value; }//for q } for(ccol =1;ccol<=N.nu;ccol++)//压缩存储该行非零元 if (ctemp[ccol]) { if (++N.tu > MAXSIZE) printf("error"); N.data[N.tu].row = i; N.data[N.tu].col = ccol; N.data[N.tu].value = ctemp[ccol]; } } } PrintM(N); } main() { SMaxtrix M; M = CreateSMaxtrix(); PrintM(M); printf("\n"); SMaxtrix T; T = TransMatrix(M); PrintM(T); SMaxtrix Q; Q = CreateSMaxtrix(); PrintM(Q); printf("\n"); MultSMaxtrix(M, Q); } ```

用十字链表实现矩阵的A=A+B

C语言,希望能给出完整的源程序,在下感激不尽,希望哪位大神能够相助,在下感谢万分!

输入N*N的矩阵,输出它的转置矩阵?

样例输入 2 1 2 1 2 样例输出 1 1 2 2 我的代码如下: ``` #include <stdio.h> #define N 100 int main() { int i,j,a[N][N],n; scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) { scanf("%d",&a[i][j]); } for(i=0;i<n;i++) for(j=0;j<n;j++) { printf("%d ",a[j][i]); printf("\n"); return 0; } } ``` 我的输出都成一行了。 麻烦帮我调试修改一下,谢谢大佬!

用c语言,实现mpi中矩阵加法的并行处理

如何在VC中用mpi定义二维数组,实现数组相加的并行处理?希望高手们可以指点一二,感激不尽

c语言简单题,求矩阵的转置矩阵

![图片说明](https://img-ask.csdn.net/upload/201901/04/1546611499_210346.png) 我的答案: ``` #include <stdio.h> #define N 10 void Transpose(int (*a)[N], int n); void Swap(int *x, int *y); void InputMatrix(int (*a)[N], int n); void PrintMatrix(int (*a)[N], int n); void InputMatrix(int (*a)[N], int n) { int i,j; for(i = 0;i < n ;i++) { for(j = 0;j < n; j++) { scanf("%d",&a[i*n + j]); } } } void Transpose(int (*a)[N], int n) { int i,j; for(i = 0;i < n ;i++) { for(j = 0;j < n; j++) { Swap(&a[i*n + j], &a[j*n + i]); } } } void Swap(int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; } PrintMatrix(int (*a)[N], int n) { int i,j; for(i = 0;i < n ;i++) { for(j = 0;j < n ; j++) { printf("%d\t", *a[i*n + j]); } printf("\n"); } } int main() { int n,s[N][N]; printf("Input n:"); scanf("%d",&n); printf("Input %d*%d matrix:\n",n,n); InputMatrix( s, n); Transpose( s, n); printf("The transposed matrix is:\n"); PrintMatrix( s, n); return 0; } ``` 请问哪里错了?该怎么改?

mpi并行计算矩阵转置时间远慢于串行 为什么

如题,进行并行计算课程实验时利用mpi编程在学校服务器上进行程序运行计算10000*10000矩阵转置计算 代码如下 ``` #include "stdio.h" #include "stdlib.h" #include "mpi.h" #include "math.h" #define E 0.0001 #define a(x,y) a[x*m+y] #define b(x,y) b[x*m+y] #define A(x,y) A[x*size+y] #define B(x,y) B[x*size+y] #define intsize sizeof(int) #define floatsize sizeof(float) #define charsize sizeof(char) int size,N; /* size:±£´æ¾ØÕóÐÐÊý;N:±£´æ¾ØÕóÁÐÊý */ int m; /* ±£´æ×Ó·½ÕóµÄ³ß´ç */ int t; /* ÆåÅÌ»®·ÖµÄ·Ö¸îÊý */ float *A, *B; /* A:±£´æÔ­¾ØÕó;B:±£´æתÖúóµÄ¾ØÕó */ double starttime; /* ±£´æ¿ªÊ¼Ê±¼ä */ double time1; /* ±£´æ·Ö·¢Êý¾ÝµÄ½áÊøʱ¼ä */ double time2; /* ±£´æÔËÐеĽáÊøʱ¼ä */ int my_rank; /* ±£´æµ±Ç°½ø³ÌµÄ½ø³ÌºÅ */ int p; /* ±£´æ½ø³ÌÊý */ MPI_Status status; /* ±£´æMPI״̬ */ FILE *fdA; /* ÊäÈëÎļþ */ /* ÔËÐнáÊøÇ°,µ÷Óñ¾º¯ÊýÊÍ·ÅÄÚ´æ¿Õ¼ä */ void Environment_Finalize(float *a,float *b) { free(a); free(b); } int main(int argc, char **argv) { int i,j,k,my_rank,group_size; float *a,*b; int u,v; float temp; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&group_size); MPI_Comm_rank(MPI_COMM_WORLD,&my_rank); p=group_size; /* Èç¹ûÊÇÖ÷½ø³Ì(rank=0µÄ½ø³Ì),Ôò½øÐжÁÎļþµÄ²Ù×÷, ½«´ýתÖõľØÕó¶ÁÈëÄÚ´æ,±£´æµ½È«¾Ö±äÁ¿AÖÐ */ if(my_rank==0) { starttime=MPI_Wtime(); fdA=fopen("mat_data.txt","r"); /* ¶ÁÈë¾ØÕóµÄÐÐÊýºÍÁÐÊý,²¢±£´æµ½sizeºÍNÖÐ */ fscanf(fdA,"%d %d", &size, &N); /* ÅжÏÊÇ·ñÊÇ·½Õó,Èç¹û²»ÊÇ,³ÌÐòÍ˳ö */ if(size != N) { puts("The input is error!"); exit(0); } A=(float*)malloc(floatsize*size*size); B=(float*)malloc(floatsize*size*size); /* ½«¾ØÕóµÄËùÓÐÖµ¶ÁÈë,±£´æµ½AÖÐ */ for(i = 0; i < size; i ++) { for(j = 0; j < size; j ++) fscanf(fdA, "%f", A+i*size+j); } fclose(fdA); } /* ¹ã²¥¾ØÕóµÄ³ß´ç */ MPI_Bcast(&size,1,MPI_INT,0,MPI_COMM_WORLD); /* »ñµÃÆåÅÌ»®·ÖµÄÊýÄ¿ */ t=(int)sqrt(p); if (t>size) t=size; if(size%t!=0) for(;;) { t--; if(size%t==0) break; } /* »ñµÃʵ¼ÊÀûÓõĴ¦ÀíÆ÷¸öÊý */ p=t*t; /* ÿ¸ö×Ó·½ÕóµÄ³ß´ç */ m=size/t; /* a±£´æ×Ó·½Õó,bÊÇÁÙʱ¾ØÕó,ÊÇÖ÷½ø³ÌÓÃÀ´±£´æ´ý·¢Ë͸ø±ðµÄ½ø³ÌµÄ×Ó·½Õó */ a=(float *)malloc(floatsize*m*m); b=(float *)malloc(floatsize*m*m); if (a==NULL||b==NULL) printf("allocate space fail!"); /* ¶ÔÖ÷½ø³Ì,»ñµÃ×Ô¼ºµÄ×Ó·½Õó(¼´×óÉϽǵÄ×Ó·½Õó) */ if (my_rank==0) { for(i=0;i<m;i++) for(j=0;j<m;j++) a(i,j)=A(i,j); } /* Ö÷½ø³ÌÏòÆäËû½ø³Ì·¢ËÍÊý¾Ý */ if (my_rank==0) { for(i=1;i<p;i++) { v=i/t; /* ×Ó·½ÕóµÄÐкŠ*/ u=i%t; /* ×Ó·½ÕóµÄÁкŠ*/ for(j=v*m;j<(v+1)*m;j++) for(k=u*m;k<(u+1)*m;k++) b((j%m),(k%m))=A(j,k); /* ½«×Ó·½ÕóÔÝ´æÔÚbÖÐ */ /* ½«×Ó·½Õó·¢Ë͵½ÏàÓ¦µÄ½ø³Ì */ MPI_Send(b,m*m,MPI_FLOAT,i,i,MPI_COMM_WORLD); } } else if (my_rank<p) /* ¶ÔÆäËû½ø³Ì,´ÓÖ÷½ø³Ì½ÓÊÕÊý¾Ý */ MPI_Recv(a,m*m,MPI_FLOAT,0,my_rank,MPI_COMM_WORLD,&status); time1=MPI_Wtime(); /* ¶ÔÏÂÈý½ÇµÄ×Ó·½Õó½øÐд¦Àí */ if ((my_rank/t)>(my_rank%t)&&my_rank<p) { v=my_rank/t; /* ÐкŠ*/ u=my_rank%t; /* ÁкŠ*/ /* ·¢ËÍ×Ó·½Õóµ½Î»ÓÚÏàÓ¦ÉÏÈý½ÇλÖõĽø³Ì */ MPI_Send(a,m*m,MPI_FLOAT,(u*t+v),(u*t+v),MPI_COMM_WORLD); /* ´ÓÏàÓ¦ÉÏÈý½ÇλÖõĽø³Ì½ÓÊÕÊý¾Ý */ MPI_Recv(a,m*m,MPI_FLOAT,(u*t+v),my_rank,MPI_COMM_WORLD,&status); } /* ¶ÔÉÏÈý½ÇµÄ×Ó·½Õó½øÐд¦Àí */ if ((my_rank/t)<(my_rank%t)&&my_rank<p) { v=my_rank/t; /* ÐкŠ*/ u=my_rank%t; /* ÁкŠ*/ /* ½«×Ó·½ÕóÔªËظ´ÖƵ½b */ for(i=0;i<m;i++) for(j=0;j<m;j++) b(i,j)=a(i,j); /* ´ÓÏàÓ¦ÏÂÈý½ÇλÖõĽø³Ì½ÓÊÕÊý¾Ý */ MPI_Recv(a,m*m,MPI_FLOAT,(u*t+v),my_rank,MPI_COMM_WORLD,&status); /* ×Ó·½Õó·¢Ë͵½Î»ÓÚÏàÓ¦ÏÂÈý½ÇλÖõĽø³Ì */ MPI_Send(b,m*m,MPI_FLOAT,(u*t+v),(u*t+v),MPI_COMM_WORLD); } /* ¶Ôÿһ¸ö×Ó·½Õó½øÐÐתÖà */ for(i=1;i<m;i++) for(j=0;j<i;j++) { temp=a(i,j); a(i,j)=a(j,i); a(j,i)=temp; } /* Ö÷½ø³Ì¿ªÊ¼½«×ªÖõĽá¹û½øÐÐ×éºÏ ÏȽ«Ö÷½ø³ÌµÄ½á¹û×éºÏµ½BÖÐ×óÉÏ½Ç */ if (my_rank==0) { for(i=0;i<m;i++) for(j=0;j<m;j++) B(i,j)=a(i,j); } /* Ö÷½ø³Ì´ÓÆäËû½ø³Ì½ÓÊÕ½á¹û,×éºÏµ½BµÄÏàӦλÖà */ if (my_rank==0) { for(i=1;i<p;i++) { /* ´ÓÆäËû½ø³Ì½ÓÊÕ½á¹û */ MPI_Recv(a,m*m,MPI_FLOAT,i,i,MPI_COMM_WORLD,&status); v=i/t; /* ½á¹ûµÄÐкŠ*/ u=i%t; /* ½á¹ûµÄÁкŠ*/ for(j=v*m;j<(v+1)*m;j++) for(k=u*m;k<(u+1)*m;k++) B(j,k)=a((j%m),(k%m)); /* ½á¹û×éºÏµ½BµÄÏàӦλÖà */ } } else if(my_rank<p) /* ÆäËû½ø³Ì·¢Ëͽá¹ûµ½Ö÷½ø³Ì */ MPI_Send(a,m*m,MPI_FLOAT,0,my_rank,MPI_COMM_WORLD); /* ÓÉÖ÷½ø³Ì´òÓ¡¼ÆËã½á¹û */ // if (my_rank==0) // { // printf("Input of file \"dataIn.txt\"\n"); // printf("%d\t%d\n", size, size); // for(i=0;i<size;i++) // { // for(j=0;j<size;j++) printf("%f\t",A(i,j)); // printf("\n"); // } // printf("\nOutput of Matrix AT\n"); // for(i=0;i<size;i++) // { // for(j=0;j<size;j++) printf("%f\t",B(i,j)); // printf("\n"); // } // } time2=MPI_Wtime(); /* ÓÉÖ÷½ø³Ì´òӡʱ¼äÐÅÏ¢ */ if (my_rank==0) { printf("\n"); printf("Whole running time = %f seconds\n",time2-starttime); printf("Distribute data time = %f seconds\n",time1-starttime); printf("Parallel compute time = %f seconds\n",time2-time1); } MPI_Barrier(MPI_COMM_WORLD); MPI_Finalize(); Environment_Finalize(a,b); return(0); } ``` 增加进程数时间总体是增大的 如图![图片说明](https://img-ask.csdn.net/upload/201704/05/1491395111_19254.png) 请问为什么

【C语言】有关数组转置与指针应用的题目,求大佬解答

编写函数实现矩阵(4行4列)的转置。要求函数的实参为数组名,形参为指针形式。

C语言:运用指针,输出3*3矩阵的转置阵。大佬们帮忙看看哪里出问题了

``` #include "stdafx.h" #include <stdio.h> int _tmain(int argc, _TCHAR* argv[]) { void fun(int *x); int a[3][3],i; int *p=&a[0][0]; printf("请输入一个整形矩阵:"); for(i=0;i<3;i++) { scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]); } fun(p); printf("输出转置矩阵:\n"); for(i=0;i<3;i++) { printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]); } return 0; } void fun(int *x) { int m,n,s; for(m=0;m<3;m++) { for(n=0;n<3;n++) { s=*(x+3*m+n); *(x+3*m+n)=*(x+3*n+m); *(x+3*n+m)=s; } } } ``` 输入:1 2 3 4 5 6 7 8 9 输出:1 2 3 4 5 6 7 8 9 结果依然是原矩阵,是哪一步出问题了呢?

求助:原题目是用指针实现矩阵的转置,现在我不知道自己错在哪里了。。。拜托大家帮我看一下

1. #include<stdio.h> 2. #include<stdlib.h> 3.#include<string.h> 4.void main (void) 5.{ int a[4][4], (*p)[4]; int i=0, j=0,t; for(i=0; i<4; i++) { for(j=0; j<4; j++) { scanf("%d",&a[i][j]); if(j == 3) { printf("\n"); } } } //输入矩阵 for(i=0,j=0,p=a; i<4; i++,j++) { t = *(*(p+i)+j); *(*(p+i)+j) = *(*(p+j)+i); *(*(p+j)+i) = t; } //转置矩阵 for(i=0; i<4; i++) { for(j=0; j<4; j++) { printf("%5d",a[i][j]); if(j == 3) { printf("\n"); } } } //输出矩阵 system("pause"); return 0; }

关于矩阵快速转置算法问题

请问圈出的部分是什么意思啊![图片](https://img-ask.csdn.net/upload/201512/30/1451481399_816593.jpg)

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

点沙成金:英特尔芯片制造全过程揭密

“亚马逊丛林里的蝴蝶扇动几下翅膀就可能引起两周后美国德州的一次飓风……” 这句人人皆知的话最初用来描述非线性系统中微小参数的变化所引起的系统极大变化。 而在更长的时间尺度内,我们所生活的这个世界就是这样一个异常复杂的非线性系统…… 水泥、穹顶、透视——关于时间与技艺的蝴蝶效应 公元前3000年,古埃及人将尼罗河中挖出的泥浆与纳特龙盐湖中的矿物盐混合,再掺入煅烧石灰石制成的石灰,由此得来了人...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

你打算用Java 8一辈子都不打算升级到Java 14,真香

我们程序员应该抱着尝鲜、猎奇的心态,否则就容易固步自封,技术停滞不前。

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

一文带你入门Java Stream流,太强了

两个星期以前,就有读者强烈要求我写一篇 Java Stream 流的文章,我说市面上不是已经有很多了吗,结果你猜他怎么说:“就想看你写的啊!”你看你看,多么苍白的喜欢啊。那就“勉为其难”写一篇吧,嘻嘻。 单从“Stream”这个单词上来看,它似乎和 java.io 包下的 InputStream 和 OutputStream 有些关系。实际上呢,没毛关系。Java 8 新增的 Stream 是为...

立即提问
相关内容推荐