数据结构课程设计数据结构课设总结
数据结构课程设计 时间:2021-09-23 阅读:(
)
数据结构课程设计 稀疏矩阵实现与应用
(1)#include <stdio.h>
int main()
{
int i,j,k,num;
int *arr;
printf("输入非0元素的数量:");
scanf("%d",&num);
arr=(int *)malloc(sizeof(int)*(num+1)*3);
for(i=1;i<=num;i++)
{
printf("输入第%d个三元组数据",i);
scanf("%d%d%d",&arr[i*3],&arr[i*3+1],&arr[i*3+2]);
}
for(i=1;i<=num;i++) //获取稀疏矩阵的行和列
{
if(arr[0]<arr[i*3]) arr[0]=arr[i*3]; //保存矩阵的行
if(arr[1]<arr[i*3+1]) arr[1]=arr[i*3+1]; //保存矩阵的列
}
arr[2]=num;//元素数量
printf("稀疏矩阵三元组:
");
for(i=0;i<=num;i++) //输出三元组数据
{
for(j=0;j<3;j++)
printf("%4d", arr[i*3+j]);
printf("
");
}
printf("稀疏矩阵:
");
k=1;
for(i=0;i<=arr[0];i++) //稀疏矩阵的行数
{
for(j=0;j<=arr[1];j++) //稀疏矩阵的列数
{
if(i==arr[k*3] && j==arr[k*3+1] && k<=arr[2])
{
printf("%4d ",arr[k*3+2]); //输出非0数据
k++;
}
else
printf("%4d ", 0); //输出0
}
printf("
");
}
getch();
return 0;
}
三元组形式保存的稀疏矩阵还原为矩阵并输出
(2)#include <stdio.h>
void MatrixMul(int **a,int **b, int **c, int x, int y, int z)
{
int i,j,k;
for (j=0;j<y;j++) //清空目标矩阵C的内容
for(i=0;i<x;i++)
c[j][i]=0;
for(j=0;j<y;j++) //进行矩阵乘法运算
for(i=0;i<x;i++)
for(k=0;k<z;k++)
c[j][i]+= a[j][k]*b[k][i];
}
int main()
{
int i,j,k,tmp;
int ARow,ACol; //矩阵A的行、列
int BRow,BCol; //矩阵B的行、列
int CRow,CCol; //矩阵C的行列
int **a,**b,**c; //分别指向3个矩阵的内存
printf("输入矩阵A的行数和列数:");//输入矩阵A的行数、列数
scanf("%d %d",&ARow,&ACol);
BRow=ACol; //矩阵B的行数等于矩阵A的列数
printf("输入矩阵B的列数:");//输入矩阵B的列数
scanf("%d",&BCol);
CRow=ARow; //目标矩阵C的行数
CCol=BCol; //目标矩阵C的列数
c=(int **)malloc(sizeof(int *)*CRow); //分配保存矩阵C的二级指针存储空间
for(j=0;j<CRow;j++) //分配一级指针内存空间
c[j]=(int *)malloc(sizeof(int)*CCol);
a=(int **)malloc(sizeof(int *)*ARow);//分配保存矩阵A的二级指针
for(j=0;j<ARow;j++)
a[j]=(int *)malloc(sizeof(int)*ACol);
b=(int **)malloc(sizeof(int *)*BRow); //分配保存矩阵B的二级指针
for(j=0;j<BRow;j++)
b[j]=(int *)malloc(sizeof(int)*BCol);
if(!b[BRow-1]) //判断内存是否分配成功
{
printf("分配内存失败!
");
exit(0);
}
printf("输入矩阵A的数据(%d行%d列):
",ARow,ACol);//输入A阵元素
for(j=0;j<ARow;j++)
for (i=0;i<ACol;i++)
{
scanf("%d",&tmp);
a[j][i]=tmp;
}
printf("输入矩阵A的数据(%d行%d列):
",BRow,BCol);//输入B阵元素
for(j=0;j<BRow;j++)
for (i=0;i<BCol;i++)
{
scanf("%d",&tmp);
b[j][i]=tmp;
}
MatrixMul(a,b,c,CCol,CRow,ACol);//调用矩阵乘法函数
printf("矩阵相乘的结果:
");
for(j=0;j<CRow;j++) //输出矩阵乘法结果
{
for(i=0;i<CCol;i++)
printf("%d ",c[j][i]);
printf("
");
}
getch();
return 0;
}
矩阵乘法
(3)
多维矩阵转一维矩阵(以2维为例)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int row, column,i,ARow,ACol,loc,tmp;
int **arr1,*arr2; //分别指向2个矩阵的内存
printf("输入矩阵的行数和列数:");//输入矩阵A的行数、列数
scanf("%d %d",&ARow,&ACol);
arr1=(int **)malloc(sizeof(int *)*ARow); //分配保存矩阵的二级指针存储空间
for(i=0;i<ARow;i++) //分配一级指针内存空间
arr1[i]=(int *)malloc(sizeof(int)*ACol);
arr2=(int *)malloc(sizeof(int)*ARow*ACol);//分配保存一维矩阵的存储空间
if(arr1==NULL) //判断内存是否分配成功
{
printf("分配内存失败!
");
exit(0);
}
printf("输入二维矩阵的数据(%d行%d列):
",ARow,ACol);//输入A阵元素
for(row=0;row<ARow;row++)
for(column=0;column<ACol;column++)
{
scanf("%d",&tmp);
arr1[row][column]=tmp;
}
printf("
以行为主转换为一维矩阵:
");
for(row=0;row<ARow;row++)//按行循环
{
for(column=0;column<ACol;column++) //按列循环
{
loc=column+row*ACol; //转换为一维矩阵的序号
arr2[loc]=arr1[row][column]; //保存元素
}
}
for(i=0;i<ARow*ACol;i++) //输出一维矩阵
printf("%d ", arr2[i]);
printf("
以列为主转换为一维矩阵:
");
for(column=0;column<ACol;column++)
{
for(row=0;row<ARow;row++)
{
loc=row+column*ARow; //转换为一维矩阵的序号
arr2[loc]=arr1[row][column]; //保存元素
}
}
for(i=0;i<ARow*ACol;i++) //输出一维矩阵
printf("%d ", arr2[i]);
printf("
");
getch();
return 0;
}
就这些了不满意也就没办法了数据结构课程设计--一元多项式计算
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct polynode
{
int coef; //多项式的系数
int exp; //指数
struct polynode *next;
}node;
node *create() //用尾插法建立一元多项式的链表
{
node *h,*r,*s;
int c,e;
h=(node*)malloc(sizeof(node));
r=h;
printf("coef:");
scanf("%d",&c);
printf("exp: ");
scanf("%d",&e);
while(c!=0) //输入系数为0时,多项式的输入结束
{
s=(node*)malloc(sizeof(node));
s->coef=c;
s->exp=e;
r->next=s;
r=s;
printf("coef:");
scanf("%d",&c);
printf("exp: ");
scanf("%d",&e);
}
r->next=NULL;
return(h);
}
void print(node *p) //输出函数,打印出一元多项式
{
while(p->next!=NULL)
{
p=p->next;
printf(" %d*x^%d",p->coef,p->exp);
}
}
void polyadd(node *ha, node *hb)//一元多项式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式ha中,并将多项式hb删除
{
node *p,*q,*pre,*temp;
int sum;
p=ha->next;
q=hb->next;
pre=ha;
while(p!=NULL&&q!=NULL)
{
if(p->exp<q->exp)
{
pre->next=p;
pre=pre->next;
p=p->next;
}
else if(p->exp==q->exp)
{
sum=p->coef+q->coef;
if(sum!=0)
{
p->coef=sum;
pre->next=p;pre=pre->next;p=p->next;
temp=q;q=q->next;free(temp);
}
else //如果系数和为零,则删除结点p与q,并将指针指向下一个结点
{
temp=p->next;free(p);p=temp;
temp=q->next;free(q);q=temp;
}
}
else
{
pre->next=q;
pre=pre->next;
q=q->next;
}
}
if(p!=NULL) //将多项式A中剩余的结点加入到和多项式中
pre->next=p;
else
pre->next=q;
}
void multipoly(node *ha,node *hb)
{ node *p,*q,*n,*m;
p=ha->next;
n=(node*)malloc(sizeof(node));
n->next=NULL;
while(p!=NULL)
{ m=(node*)malloc(sizeof(node));
for(q=hb->next;q;q=q->next)
{ m->coef=p->coef*q->coef;
m->exp=p->exp+q->exp;
m->next=NULL;
}
p=p->next;
polyadd(n,m);
}
printf("多项式的积是:
");
print(n);
}
void main()
{
node *ha,*hb;
printf("请输入多项式ha的系数与指数:
");
ha=create();
print(ha);
printf("
");
printf("请输入多项式hb的系数与指数:
");
hb=create();
print(hb);
printf("
");
printf("多项式的和是:
");
polyadd(ha,hb);
print(ha);
printf("
");
multipoly(ha,hb);
}数据结构课设总结
我正好在做课设,我把我的总结给你。
数据结构是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,而且也已经成为其他理工专业的热门选修课。
随着高级语言的发展,数据结构在计算机的研究和应用中已展现出强大的生命力,它兼顾了诸多高级语言的特点,是一种典型的结构化程序设计语言,它处理能力强,使用灵活方便,应用面广,具有良好的可移植性。
紧张的两周数据结构实训很快就过去了,通过这两周的实践学习,不仅使我们巩固了以前的知识并在此基础上还对数据结构的特点和算法有了更深的了解,使我们在这门课程的实际应用上也有了一个提高。
首先这两周的学习,使我们在巩固了原有的理论知识上,又培养了灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力,使我们体会到自身知识和能力在实际中的应用和发挥。
其次,它激发了我们创新意识,开发创造的能力和培养沟通能力。
另外,让我们进一步熟悉了数据结构的设计应用。
每一处编码都是在反复的熟悉数据结构的结构特性,及其语法、函数和程序设计思想的过程,对我们数据结构的学习和提高很有益处,并且使我们明白了程序设计过程,如解决一些实际问题,从解决实际问题的角度,我们可以这样来看:第一要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;第二,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的数据结构的基本类型——线性表、栈、队列、串、数组、广义表、树和二叉树以及图等,然后确定处理过程——算法,通过在编译环境中的编译与调试,可到最终的程序。
最后,在这次的实训过程中,我们深刻的认识到了自己在学习方面的不足之处,我知道我还有太多的基本的思想没有真正的理解,当然我们不会灰心,我们会在以后的日子里努力弥补我们的不足。
在两周的实训中,我们也体会到了团队合作的重要性,从最初的查阅资料到最后的程序的成功运行,我们组有过山穷水尽的困惑;有过柳暗花明的惊喜;有过唇枪舌剑的辩论;有过相互鼓励的安慰。
两个礼拜的时间我们经历了很多,也收获了很多。
与其说这次的实训是体力与脑力的作业,不如说它是合作精神和毅力的考验。
经过这次课程设计,我们不仅学到了很多知识和技能,更重要的是我们学会了如何运用所学知识去解决实际问题。
总之,两个礼拜的课程设计让我们受益匪浅。
我们深深认识到,要学好一门学科,没有刻苦钻研的精神是不行的,只有在不断的尝试中,经历失败,从失败中总结经验,然后再不断的尝试,才能获得成功。
HostKvm发布了夏季特别促销活动,针对香港国际/韩国机房VPS主机提供7折优惠码,其他机房全场8折,优惠后2GB内存套餐月付仅5.95美元起。这是一家成立于2013年的国外主机服务商,主要提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。下面分享几款香港VPS和韩国VPS的配置和价格信息。...
木木云怎么样?木木云品牌成立于18年,此为贵州木木云科技有限公司旗下新运营高端的服务器的平台,目前已上线美国中部大盘鸡,母鸡采用E5-267X系列,硬盘全部组成阵列。目前,木木云美国vps进行了优惠促销,1核1G/500M带宽/1T硬盘/4T流量,仅35元/月。点击进入:木木云官方网站地址木木云优惠码:提供了一个您专用的优惠码: yuntue目前我们有如下产品套餐:DV型 1H 1G 500M带宽...
LOCVPS发来了新的洛杉矶CN2线路主机上线通知,基于KVM架构,目前可与香港云地、香港邦联机房XEN架构主机一起适用7折优惠码,优惠后最低美国洛杉矶CN2线路KVM架构2GB内存套餐月付38.5元起。LOCPVS是一家成立较早的国人VPS服务商,目前提供洛杉矶MC、洛杉矶C3、和香港邦联、香港沙田电信、香港大埔、日本东京、日本大阪、新加坡、德国和荷兰等机房VPS主机,基于KVM或者XEN架构。...
数据结构课程设计为你推荐
深圳市气象台深圳的天气预报健康门户网站健康资讯中国健康之源网?电子系统设计电子专业的毕业设计做哪方面的比较好?裂缝检测裂缝观测都要观测些什么?皮城警备英雄联盟皮城警备是好多时间出来的声源定位关于大脑皮层,小脑,下丘脑,脑干,脊髓数据挖掘的应用近年来哪些因素促进了数据挖掘的广泛应用无线监控方案近距离无线监控方案优势?寻找手机如何寻找手机,手机丢失,是自己找还是需要警察帮助呢?ibm磁盘阵列ibmds5020磁盘阵列怎么恢复出厂设置或者格式化
网站域名空间 美国服务器租用 域名备案信息查询 国外永久服务器 plesk 主机点评 2014年感恩节 好玩的桌面 远程登陆工具 中国特价网 最好看的qq空间 灵动鬼影 php空间申请 什么是刀片服务器 200g硬盘 可外链相册 美国在线代理服务器 美国独立日 外贸空间 百度云加速 更多