转置矩阵,排序

段梦园 [1**********]069 计本2班 *转置矩阵:

#include

#include

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

#define MAXSIZE 100

typedef int Status;

typedef float ElemType;

typedef struct{

int i,j;

ElemType e;

}Triple;

typedef struct{

Triple data[MAXSIZE+1];

int mu,nu,tu;

}TSMatrix;

TSMatrix NewMatrix(int m,int n);

Status InsertElem(TSMatrix *M,int row,int col,ElemType e); Status FindElem(const TSMatrix *M,int row,int col,ElemType *e); Status TransposeSMatrix(const TSMatrix *M,TSMatrix *T); Status FastTransposeSMatrix(const TSMatrix *M,TSMatrix *T); Status MultSMatrix(const TSMatrix *M,const TSMatrix *T,TSMatrix *Q); void PrintSMatrix(const TSMatrix *M);

int main()

{

TSMatrix M=NewMatrix(3,4);

TSMatrix T;

TSMatrix Q;

InsertElem(&M,3,2,16);

InsertElem(&M,2,2,18);

printf("\nM:");

PrintSMatrix(&M);

FastTransposeSMatrix(&M,&T);

printf("\nT(Transpose of M):");

PrintSMatrix(&T);

MultSMatrix(&M,&T,&Q);

printf("\nM*T=");

PrintSMatrix(&Q);

return 0;

}

TSMatrix NewMatrix(int m,int n){

TSMatrix M;

M.mu=m;

M.nu=n;

M.tu=0;

return M;

}

Status InsertElem(TSMatrix *M,int row,int col,ElemType e){

int i,t,p;

if(M->tu>=MAXSIZE){

printf("\nError:There is no space in the matrix;\n");

return ERROR;

}

if(row>M->mu||col>M->nu||row

printf("\nError:Insert position is beyond the arrange.\n"); return ERROR;

}

p=1;

if(M->tu==0){

M->data[p].i=row;

M->data[p].j=col;

M->data[p].e=e;

M->tu++;

return OK;

}

for(t=1;ttu;t++)

if((row>=M->data[t].i)&&(col>=M->data[t].j))

p++;

if(row==M->data[t-1].i && col==M->data[t-1].j){

M->data[t-1].e=e;

return OK;

}

for(i=M->tu;i>=p;i--){

M->data[i+1].i=M->data[i].i;

M->data[i+1].j=M->data[i].j;

M->data[i+1].e=M->data[i].e;

}

M->data[p].i=row;

M->data[p].j=col;

M->data[p].e=e;

M->tu++;

return OK;

}

Status FindElem(const TSMatrix *M,int row,int col,ElemType *e){ int p;

for(p=1;ptu;p++)

if(M->data[p].i==row&&M->data[p].j==col){

*e=M->data[p].e;

return TRUE;

}

return FALSE;

}

Status TransposeSMatrix(const TSMatrix *M,TSMatrix *T){

int col,p,q;

T->mu=M->nu; T->nu=M->mu; T->tu=M->tu;

if(T->tu){

q=1;

for(col=1;colmu;col++)

for(p=1;ptu;p++)

if(M->data[p].j==col){

T->data[q].i=M->data[p].j;

T->data[q].j=M->data[p].i;

T->data[q].e=M->data[p].e;

q++;

}

}

return OK;

}

Status FastTransposeSMatrix(const TSMatrix *M,TSMatrix *T){ int col,t,p,q,*num,*cpot;

T->mu=M->nu; T->nu=M->mu; T->tu=M->tu;

if(T->tu){

num=(int *)malloc(sizeof(int)*M->tu);

cpot=(int *)malloc(sizeof(int)*M->tu);

if(!(num&&cpot)){

printf("Apply for memory error.\n");

exit(0);

}

for(col=1;colnu;col++) num[col]=0;

for(t=1;ttu;t++) ++num[M->data[t].j];

cpot[1]=1;

for(col=2;colnu;col++)

cpot[col]=cpot[col-1]+num[col-1];

for(p=1;ptu;p++){

col=M->data[p].j; q=cpot[col];

T->data[q].i=M->data[p].j;

T->data[q].j=M->data[p].i;

T->data[q].e=M->data[q].e;

++cpot[col];

}

}

return OK;

}

Status MultSMatrix(const TSMatrix *M,const TSMatrix *T,TSMatrix *Q){ int i,j,k,p;

ElemType m,t,s;

if(M->nu!=T->mu){

printf("Sorry,these two matrice can't multiply.\n");

return ERROR;

}

Q->mu=M->mu; Q->nu=T->nu; Q->tu=0;

p=1;

for(i=1;imu;i++){

for(j=1;jnu;j++){

s=0;

for(k=1;knu;k++){

if(FALSE==FindElem(M,i,k,&m))

continue;

if(FALSE==FindElem(T,k,j,&t))

continue;

s+=m*t;

}

if(s!=0){

Q->data[p].i=i;

Q->data[p].j=j;

Q->data[p].e=s;

p++;

Q->tu++;

}

}

}

return OK;

}

void PrintSMatrix(const TSMatrix *M){

int i,j,p=1;

printf("\nsize:%d ר¢ %d\n",M->mu,M->nu); if(!M->tu){

printf("%g\n",0.0);

return;

}

for(i=1;imu;i++){

for(j=1;jnu;j++){

if(i==M->data[p].i && j==M->data[p].j){ printf("%g\t",M->data[p].e); p++;

}else{

printf("%g\t",0.0);

}

}

printf("\n");

}

printf("\n");

}

*插入排序:

#include

using namespace std;

#define MAXSIZE 30

void InsertSort(int r[],int n) {

int i,j;

for(i=2;i

r[0]=r[i]; //r[0]用作哨兵单元 j=i-1;

while(r[0]

{

r[j+1]=r[j]; //记录后移 j--;

}

r[j+1]=r[0];

for(j=1;j

cout

cout

}

}

int main(){

int n,i;

int r[MAXSIZE];

cout > n;

cout

cin >> r[i];

}

InsertSort(r,n);

}

*折半排序:

#include

using namespace std;

#define MAXSIZE 30

void BinaryInsertSort(int r[],int n){ int i, low, high, mid;

for( i = 2; i

r[0] = r[i]; //r[0]用作哨兵单元 low = 1;

high = i-1;

while(low

mid = (low + high)/2; if (r[mid] > r[0]){

high = mid - 1;

}

else{

low = mid + 1;

}

}

for (int j = i - 1; j > high; j-- ) {

r[j+1] = r[j]; //记录后移 }

r[high + 1] = r[0];

for(int j = 1; j

cout

}

}

int main(){

int n,i;

int r[MAXSIZE];

cout > n;

cout

{

cin >> r[i];

}

BinaryInsertSort(r,n);

}

*希尔排序:

#include

using namespace std;

#define MAXSIZE 30

void ShellSort(int r[],int n) {

for (int d = 10; d != 1;) {

d = d/2;

int i,j;

for(i = 1 + d; i

j = i-d;

while( r[0]

{

r[j+d] = r[j];

j -= d;

}

r[j+d]=r[0];

}

for(j = 1; j

{

cout

cout

}

}

int main(){

int n,i;

int r[MAXSIZE];

cout > n;

cout

{

cin >> r[i];

}

ShellSort(r,n);;

}

*归并排序:

#include

#include

using namespace std;

class mergeSort{

public:

int* Ptr;

int len;

mergeSort();

void set();

void Sort(int *arr,int len);

void numDisplay();

} ;

mergeSort() {

Ptr=nullptr;

len=0;

}

void

set(){

int num;

int* ptr(nullptr);

cout

cin>>len;

ptr=new int[len];

for(int i=0;i

cout>num;

*(ptr+i)=num;

}

Ptr=ptr;

}

void Sort(int *arr,int len){

if(len>1) {

int length=len/2;

int* num1(nullptr);

int* num2(nullptr);

num1=new int[length];

num2=new int[len-length];

for(int i=0;i

*(num1+i)=*(arr+i);

for(int i=0,j=length;i

for(int i=0;i

cout

cout

for(int i=0;i

cout

cout

int k=0,i=0,j=0;

while(i

*(arr+k)=*(num1+i); i++;

}

else{

*(arr+k)=*(num2+j);

j++;

}

k++;

}

if(i==length)

for(int temp=j;temp

j++;

}

else

for(int temp=i;temp

i++;

}

for(int h=0;h

cout

cout

}

}

void numDisplay(){

if(Ptr==nullptr)

cout

for(int i=0;i

cout

cout

}

int main(int argc, int* argv[]) { mergeSort T;

T.set();

T.numDisplay();

T.Sort(T.Ptr,T.len);

T.numDisplay();

system("pause");

return 0;

}


相关文章

  • 模糊互补判断矩阵排序的一种算法
  • 第16卷第4期系 统 工 程 学 报Vol.16No.4 2001年8月JOURNALOFSYSTEMSENGINEERINGAug.,2001 短 文 模糊互补判断矩阵排序的一种算法 徐泽水 (东南大学经济管理学院,南京210096) ① ...

  • 2012黑龙江省数据结构考试答题技巧
  • 1.若采用邻接矩阵法存储一个n个顶点的无向图,则该邻接矩阵是一个( D ). A)上三角矩阵 B) 稀疏矩阵 C) 对角矩阵 D) 对称矩阵 2.链式存储的存储结构所占存储空间( A ). A)分两部分,一部分存放结点值,另一部分存放表示结 ...

  • 数据结构,操作系统重要概念整理
  • 数据结构: 一.重点知识点 1. 了解算法的时间复杂度的概念,会求一个算法的时间复杂度: 2. 了解线性表的概念,掌握线性表的顺序表示与链式表示: 3. 掌握链表的增.删.查.改等基本操作: 4. 理解栈和队列的基本概念: 5. 掌握循环队 ...

  • 区间层次分析法的权重求解方法初探
  • 2004年11月 第26卷 第11期 文章编号:10012506X(2004)1121597204 系统工程与电子技术 SystemsEngineeringandElectronics Nov.2004Vol126 No111 区间层次分析 ...

  • 数据结构第7章 图习题
  • 第7章 图 一.单项选择题 1.在一个无向图G 中,所有顶点的度数之和等于所有边数之和的______倍. A .l/2 C .2 B .1 D .4 2.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的______倍. A .l/ ...

  • 现代管理方法
  • 论述1.什么是线性规划 线性规划是运用数学模型,对人力.设备.材料.资金等进行系统和定量的分析,使生产力得到最为合理的组织,以获得最佳的经济效益. 或在一定条件下,合理安排人力物力等资源,是经济效果达到最好,一般的,求线性目标函数在线性约束 ...

  • 研究生综合能力评价体系及模糊综合分析
  • №.1 V01.29 + 陕西科技大学学报 JOURNAI,OFSHAANXIUNIVERSITYOFSCIENCE&TECHNOI.OGY Feb.2011 ・165・ 文章编号:1000-581112011)01-0165-04 ...

  • 碎纸片的拼接复原
  • 碎纸片的拼接复原 摘要 本文利用MATLAB软件将附件图像数字化,把图像转化为灰度矩阵进行处理. 问题一,本文利用边缘匹配模型和灰度匹配模型对碎纸片的边缘作分析.基于,边缘部分的黑白分布越相近,两者相连的可能性越高的原理,得到附件1的排序是 ...

  • 层次分析实验报告
  • 综合实验项目报告 题目: 学号: 姓名: 年级专业: 分数: 教师签名: 一. 实验目的 1. 掌握层次分析法的建模思路与方法: 2. 掌握利用Excel 对层次分析法进行描述问题.处理数据.建立模型与解 题的方法. 二. 实验环境 Win ...

  • 自考02142[数据结构导论]串讲笔记
  • 第一张概论 1.1 引言 两项基本任务:数据表示,数据处理 软件系统生存期:软件计划,需求分析,软件设计,软件编码,软件测试,软件维护 由一种逻辑结构和一组基本运算构成的整体是实际问题的一种数学模型,这种数学模型的建立,选择和实现是数据结构 ...

© 2024 范文参考网 | 联系我们 webmaster# 12000.net.cn