ImageVerifierCode 换一换
格式:DOC , 页数:42 ,大小:553.50KB ,
资源ID:8320884      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/8320884.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(数据结构试验指导书.doc)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

数据结构试验指导书.doc

1、实验一 线性表程序1 1、实验目的 使学生熟练掌握单链线性表的基本操作 2、实验内容 设计程序完成一元稀疏多项式计算器的功能。 用带表头结点的单链表存储多项式,设计一个一元稀疏多项式简单计算器,多项式的项数存放在头结点中。 3、实验要求 一元稀疏多项式简单计算器的基本功能是: (1)输入并建立多项式; (2)多项式的输出形式为整数序列:n,c1,e1,c2,e2 ,…,cn ,en ,其中n 是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列; (3)多项式的输出形式为类数学表达式。例如:多项式-3x^8+6x^3-18

2、的输出形式为-3x^8+6x^3-18,x^15+(-8)x^7-14的输出形式为x^15-8x^7-14。注意:系数值为1的非零次项的输出形式中略去系数1,如项1x8的输出形式为x^8,项-1x3的输出形式为-x^3 (4)多项式a和b相加,建立多项式a+b; 4、测试数据 (1)(2x+5x^8-3.1x^11)+(7-5x^8+11x^9)=(-3.1x^11+11x^9+2x+7) (2)(1+x+x^2+x^3+x^4+x^5)+(-x^3-x^4)=(1+x+x^2+x^5) (3)(x+x^3)+(x-x^3)=0

3、 (4)(x+x^100)+(x^100+x^200)=(x+2x^100+x^200) (5)(x+x^2+x^3)+0=x+x^2+x^3 5、参考程序1: #define NULL 0 #include "stdio.h" typedef struct Lnode {/*结点类型*/ float coef ;/*系数*/ int expn;/*指数*/ struct Lnode *next; }Lnode, *link; typedef link polynomail; /*用带表头结点的有序键表表示多

4、项式*/ polynomail pa,pb,pc; void creatpolyn( polynomail p, int m) {/* 输入 m项的系数和指数,建立表示一元多项式的有序链表 p */ int i; float coef; int expn; polynomail tail,new; p->coef=m; p->expn=-1; tail=p; for(i=1;i<=m;i++) { new=(link)malloc(sizeof(Lnode)); printf("please input

5、 coef and expn "); scanf("%f", &coef); scanf("%d", &expn); new->coef=coef; new->expn=expn; new->next=NULL; tail->next=new; tail=new; } } void addpolyn(polynomail pa, polynomail pb) { /* 完成多项式相加运算,即:pc=pa+pb,并销毁一元多项式pb */ int x,len;

6、 float y; polynomail pre,p,q,u; pc=pa; len=0; pre=pa; p=pa->next; q=pb->next; while (p && q) { x=p->expn - q->expn; if (x<0) { pre=p;len ++; p=p->next; } else if (x==0)

7、 { y=p->coef + q->coef; if (y!=0.0) { p->coef=y; pre=p;len ++; } else { pre->next=p->next;

8、 free (p); } p=pre->next; u=q; q=q->next; free (u); } else { u=q->next; q->nex

9、t=p; pre->next=q; pre=q; len ++; q=u; } } if (q) pre->next=q; while(pre) { pre=pre->next; if(pre) len ++; } pc->coef=len; free (pb); } void printpoly

10、polynomail q) { /* 按类数学表达式的格式输出一元多项式的任意一项q */ if (q->expn==0) printf("%.0f", q->coef); else if (q->expn==1) { if (q->coef==1) printf("x"); else if (q->coef==-1) printf("-x");

11、 else { printf("%.0f", q->coef); printf("x"); } } else if (q->coef==1) printf("x^%d", q->expn); else if( q->coef==-1) printf("-x^%d", q->expn); else prin

12、tf("%.0fx^%d", q->coef, q->expn); } void printpolyn(polynomail p) { /* 按类数学表达式的格式输出一元多项式p */ int n; polynomail q; q=p->next; n=0; while (q) { n++; if (n==1) printpoly(q); else if (q->coef>0) {printf("+");

13、 printpoly(q); } else printpoly(q); q=q->next; }/*while*/ }/*printpolyn*/ void print(polynomail p) { /* 按输出形式为整数序列:n,c1,e1,c2,e2 ,…,cn ,en ,打印输出一元多项式 p */ polynomail q; printf("\n %.0f\n",p->coef); q=p->next;

14、 while (q) { printf(" %.0f,", q->coef); printf(" %d\n", q->expn); q=q->next; } printf("\b \n");/*去掉最后一个逗号并换行*/ } main() { int m,n; printf("\n please input n:"); scanf("%d",&n); pa=(link)malloc(sizeof(Lnode)); creatpolyn(pa,n);

15、 printf("\n pa="); printpolyn(pa); printf("\n please input m:"); scanf("%d",&m); pb=(link)malloc(sizeof(Lnode)); creatpolyn(pb,m); printf("\n pb="); printpolyn(pb); addpolyn(pa,pb); printf("\n pc=pa+pb="); printpolyn(pc); print(pc); ge

16、tchar(); getchar(); } 程序2 1、实验目的 使学生熟练掌握单链线性表的基本操作 2、实验内容 该程序的功能是创建一个以正序排列的链表,链表节点为一个整形数据,插入一个元素,删除一个元素,均保持链表的正序。在执行完每个操作后将其输出。 3、实验要求 所使用的单链表最好带有附加的头节点,这样所涉及的程序比较简洁。 参考程序2 #include "stdio.h" #include "alloc.h" #include "stdlib.h" #include "stddef.h" /*节点定义*/ typedef

17、 int datatype; typedef struct node {datatype data; struct node *next; }linklist; /*创建链表函数*/ linklist *creatlist() { datatype d; linklist *p,*s,*head; head=malloc(sizeof(linklist)); head->next=NULL; printf("please input the integer!(0---return)"); scanf("%d",&d); while (d!=0) { s=m

18、alloc(sizeof(linklist)); s->data=d; p=head; while(p->next!=NULL) if (p->next->datanext; else break; s->next=p->next; p->next=s; printf("please input the integer!0----return"); scanf("%d",&d); } return head; } /*输出链表中的所有元素*/ void output(head) linklist *head;

19、 { linklist *p; p=head->next; while(p!=NULL) { printf("%6d",p->data); p=p->next; } printf("\n"); } /*插入一个元素,标志链表的正序性。*/ void insert(head,x) linklist *head; datatype x; { linklist *p,*s; s=malloc(sizeof(linklist)); s->data=x; p=head; while (p->next!=NULL) if (p->next->

20、datanext; else break; s->next=p->next; p->next=s; printf("%d has been inserted into the linklist!\n",x); } /* 删除链表中的一个元素*/ delete(head,x) linklist *head; datatype x; { linklist *p,*s; p=head; while (p->next!=NULL) if (p->next->data!=x) p=p->next; else br

21、eak; if(p->next!=NULL) {s=p->next; p->next=s->next; printf("%d has been deleted!\n",x); } else printf("%d isn,t in thelinklist!\n",x); } /*查找元素x,找到则返回其位置,否则返回空。*/ linklist *search(head,x) linklist *head; datatype x; {linklist *p; p=head->next; while(p!=NULL) if(p->

22、data!=x) p=p->next; else break; return p; } main() { linklist *head,*p; datatype x; int i=0; char choice=' '; while (choice!='0') { printf("1-----create the list!\n"); i++ ; printf("2-----output the list!\n"); i++; printf("3-----find a element in the list!\n"); i++

23、 printf("4-----insert a element to the list!\n"); i++; printf("5-----delete a element in the list!\n"); i++; printf("0------quit\n"); printf("input your choice(0-----5)"); scanf("%c",&choice); printf("\n"); switch(choice) { case '1':head=creatlist();break; case '2':output(head);break;

24、 case '3':printf("please input a element you want to find in the list!\n"); scanf("%d",&x); p=search(head,x); if (p!=NULL) printf("%d has been found!\n",x); else printf("%d isn't in the list!\n",x); break; case '4':printf("please input a element you want to insert into the list!

25、\n"); scanf("%d",&x); insert(head,x); break; case '5':printf("please input a element you want to delete!\n"); scanf("%d",&x); delete(head,x); break; case '0':break; 实验五 数组和广义表 1、实验目的 深入了解数组的存储表示和实现,熟悉广义表的存储结构的特性 2、实验内容 稀疏矩阵运算器 3、实验要求 (1)稀疏矩阵以三元组表输入,以通常的阵列形式输出

26、 (2)实现稀疏矩阵的转置 (3)实现两个稀疏矩阵的乘法运算 4、原代码程序 #include "stdio.h" #define MAXSIZE 50 /*假设非零元个数的最大值为 50*/ #define MAXRC 10 typedef struct{ int i,j; /*该非零元的行下标和列下标*/ int e; }triple; typedef struct{ triple data[MAXSIZE+1]; /*非零元三元组表,data[0]未用*/ int m

27、u,nu,tu;/*矩阵的行数、列数和非零元个数*/ }tsmatrix; typedef struct{ triple data[MAXSIZE+1]; /*非零元三元组表,data[0]未用*/ int rpos[MAXRC+1]; /*各行第一个非零元的位置表*/ int mu,nu,tu;/*矩阵的行数、列数和非零元个数*/ }rlsmatrix; tsmatrix tcreate(int m,int n,int t) { /*建立稀疏矩阵M的三元组顺序表*/ tsmatrix M; int k; M.mu=

28、m;M.nu=n;M.tu=t; printf("\nplease input %d data",M.tu); printf("\ni j e\n"); for(k=1;k<=M.tu;++k) scanf("%d %d %d",&M.data[k].i,&M.data[k].j,&M.data[k].e); return(M); } rlsmatrix rlcreate(int m,int n,int t) { /*建立稀疏矩阵M的三元组顺序表*/ rlsmatrix M; int num[MAXRC]; int k,

29、row; M.mu=m;M.nu=n;M.tu=t; printf("\n please input %d data",M.tu); printf("\ni j e\n"); for(k=1;k<=M.tu;++k) scanf("%d %d %d",&M.data[k].i,&M.data[k].j,&M.data[k].e); for(row=1; row<=M.mu;++row) num[row]=0; /*求M中每一行含非零元个数*/ for(k=1;k<=M.tu;++k) ++num[M.data[k]

30、i]; M.rpos[1]=1; /* 求第row行中第一个非零元在 M.data中的序号*/ for(row=2; row<=M.mu;++row) M.rpos[row]=M.rpos[row-1]+num[row-1]; return(M); } void tprint(tsmatrix M) {/*输出M.data即M的三元组表*/ int k; for(k=1;k<=M.tu;++k) { printf("\n"); printf("%d %d %d",M.data[k

31、].i,M.data[k].j,M.data[k].e); } printf("\n"); } void rlprint(rlsmatrix M) {/*输出M.data即M的三元组表*/ int k; for(k=1;k<=M.tu;++k) { printf("\n"); printf("%d %d %d",M.data[k].i,M.data[k].j,M.data[k].e); } printf("\n"); } tsmatrix transpose( tsmatrix M){ /*采用三元组表存储表示

32、求稀疏矩阵M的转量矩阵T*/ 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; col<=M.nu;++col) for(p=1;p<=M.tu;++p) if(M.data[p].j==col){ T.data[q].i=M.data[p].j;

33、T.data[q].j=M.data[p].i; T.data[q].e=M.data[p].e; ++q;} } return(T); } tsmatrix fasttrans(tsmatrix M) {/*快速转置*/ tsmatrix T; int col,p,q,t; int num[MAXRC]; int cpot[MAXRC]; T.mu=M.nu;T.nu=M.mu;T.tu=M.tu; if(T.tu){ for(col=1; col<=M.nu;++

34、col) num[col]=0; for(t=1;t<=M.tu;++t) ++num[M.data[t].j]; /*求M中每一列含非零元个数*/ cpot[1]=1; /* 求第col列中第一个非零元在 b.data中的序号*/ for(col=2; col<=M.nu;++col) cpot[col]=cpot[col-1]+num[col-1]; for(p=1;p<=M.tu;++p){ co

35、l=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[p].e; ++cpot[col]; } } return(T); } rlsmatrix mult(rlsmatrix M, rlsmatrix N) {/*求矩阵乘积Q=M*N,采用行逻辑链接存储表示*/ rlsmatr

36、ix Q; int arow,brow,ccol; int t,tp,p,q; int ctemp[MAXRC]; Q.mu=M.mu; Q.nu=N.nu; Q.tu=0;/*Q初始化*/ if(M.tu*N.tu!=0){/*Q是非零矩阵*/ for (arow=1;arow<=M.mu;++arow){ /*处理M的每一行*/ for(ccol=1;ccol<=Q.nu;++ccol) ctemp[ccol]=0; /*M当前行各元素累加器清零*/

37、 Q.rpos[arow]=Q.tu+1; if(arow

38、){ ccol=N.data[q].j; ctemp[ccol]+=M.data[p].e*N.data[q].e; }/*for q*/ }/*for p*/ for(ccol=1;ccol<=Q.nu;++ccol) if(ctemp[ccol]){ ++Q.tu; Q.data[Q.tu].i=arow; Q.data[Q.tu].j=ccol; Q.data[Q.tu].e=ct

39、emp[ccol]; } } } return(Q); }/*mult*/ main() { int m,n,t,m1,m2,n1,n2,t1,t2; rlsmatrix M,N,Q; tsmatrix E,F; printf("\n please input m,n,t:"); scanf("%d %d %d",&m,&n,&t); E=tcreate(m,n,t); tprint(E); F=transpose(E); tprint(F); printf("\n please inp

40、ut m1,n1,t1:"); scanf("%d %d %d",&m1,&n1,&t1); M=rlcreate(m1,n1,t1); rlprint(M); printf("\n please input m2,n2,t2:"); scanf("%d %d %d",&m2,&n2,&t2); N=rlcreate(m2,n2,t2); rlprint(N); Q=mult(M,N); rlprint(Q); getchar(); getchar(); } 试验七 二叉树的建立及输出 试验目的: 熟

41、悉二叉链表表示的二叉树结构及其递归遍历,掌握建立二叉链表要领,深入理解递归遍历二叉链表的执行路径。 试验内容: 建立一颗二叉链表表示的二叉树。 对其进行前序,中序,后序输出。 试验要求: 先将二叉树通过加入虚节点的方式使其完全化,然后按层将其输入。可以用二叉树中不会出现字符表示虚节点例如@,另一二叉树中不会出现的字符表示输入序列结束例如#。如下二叉树须输入序列a@b@@c# 。或以广义表的形式输入二叉树的节点。 按先序,中序,后序序列将其遍历输出。 参考程序: #include "stdio.h" #include "alloc.h" #include "stdlib.

42、h" #include "stddef.h" #define maxsize 100 typedef int datatype; /*定义二叉树节点*/ typedef struct node {datatype data; struct node *lchild,*rchild; }bitree; bitree q[maxsize];/*定义全局队列*/ /*建立二叉树*/ bitree *creatree() {char ch; int front,rear; bitree *s,*root; root=NULL; front=1; rear=0;

43、printf("please input a tree's string ended with #!\n"); ch=getchar(); while(ch!='#') {s=NULL; if (ch!='@') {s=malloc(sizeof(bitree)); s->data=ch; s->lchild=s->rchild=NULL; } rear++; q[rear]=s; if(rear==1) root=s; else {if (s&&q[front]) if(rear%2==0)q[front]->lchild=s;

44、 else q[front]->rchild=s; if (rear%2==1) front++; } ch=getchar(); } return root; } /*中序遍历二叉树*/ inorder(t) bitree *t; { if (t) {inorder(t->lchild); printf("%6c",t->data); inorder(t->rchild); } } /*先序遍历二叉树*/ preorder(t) bitree *t; { if (t) { printf("%6c",

45、t->data); preorder(t->lchild); preorder(t->rchild); } } /*后序遍历二叉树*/ postorder(t) bitree *t; { if (t) {postorder(t->lchild); postorder(t->rchild); printf("%6c",t->data); } } main() { bitree *t; int i; do { printf("1---------creat the binary tree!\

46、n"); printf("2---------traverse the tree in inorder!\n"); printf("3---------traverse the tree in preorder!\n"); printf("4---------traverse the tree in postorder!\n"); printf("0-------quit!\n"); scanf("%d",&i); switch(i) { case 1:t=creatree(); break; case 2:inorder(t); printf("\

47、n"); break; case 3:preorder(t); printf("\n"); break; case 4:postorder(t); printf("\n"); break; case 0:break; default:puts("again"); } }while (i!=0); }  试验八:图及其遍历 1. 试验目的: 1) 熟悉图的邻接矩阵及邻接表的表示方法。 2) 掌握建立图的邻接矩阵算法,并由邻接矩阵转化为邻接表 3) 熟悉对图遍历算法。 2. 试验内容: 1) 建立图的邻接表及邻接矩阵。

48、 2) 对其进行深度优先及广度优先遍历。 3. 试验要求: 将如下图以邻接矩阵的存储形式存入计算机,然后输出其深度优先及广度优先序列。 4. 参考程序: #include "stddef.h" #include "stdlib.h" #include "stdio.h" #include "alloc.h" #define n 6 #define e 8 #define TRUE 1 #define FALSE 0 typedef char vextype; typedef int adjtype; /*定义邻接矩阵存放的图*/ typede

49、f struct { vextype vexs[n]; adjtype arcs[n][n]; }graph; graph *ga1; /*定义邻接表存放的图*/ typedef struct node {int adjvex; struct node *next; }edgenode; typedef struct {vextype vertex; edgenode *link; }vexnode; vexnode ga2[n]; /*建立邻接矩阵*/ creatgraph(ga) graph *ga; {int i,j,k; print

50、f("please input %d vexs for the graph!\n",n); for(i=0;ivexs[i]=getchar(); for(i=0;iarcs[i][j]=0; for(k=0;karcs[i

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服