欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    数据结构课程设计参考答案a组.docx

    • 资源ID:23978795       资源大小:28.05KB        全文页数:62页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构课程设计参考答案a组.docx

    1、数据结构课程设计参考答案a组/* 二叉树的层次遍历*/#include#include#include #include#define TREEMAX 50typedef struct node char data; struct node *lchild; struct node *rchild; Node;/ 递归创建二叉树Node *CreateBT() Node *t; char x; scanf(%c, &x); fflush(stdin); if(x=#) t=NULL; else t=new Node; t-data=x; printf(tt请输入%c结点的左子结点: ,t-da

    2、ta); t-lchild=CreateBT(); printf(tt请输入%c结点的右子结点: ,t-data); t-rchild=CreateBT(); return t;/ 递归先序遍历二叉树void Preorder(Node *T) if(T) printf(%3c,T-data); Preorder(T-lchild); Preorder(T-rchild); / 递归中序遍历二叉树void Inorder(Node *T) if(T) Inorder(T-lchild); printf(%3c,T-data); Inorder(T-rchild); / 递归后序遍历二叉树voi

    3、d Postorder(Node *T) if(T) Postorder(T-lchild); Postorder(T-rchild); printf(%3c,T-data); / 非递归先序遍历二叉树void noRecursivePreorder(Node *T) Node *StTREEMAX,*p; int top=-1; if(T!=NULL) top+; Sttop=T; while(top-1) p=Sttop; top-; printf(%c,p-data); if(p-rchild!=NULL) top+; Sttop=p-rchild; if(p-lchild!=NULL)

    4、 top+; Sttop=p-lchild; printf(n); / 非递归中序遍历二叉树void noRecursiveInorder(Node *T) Node *StTREEMAX,*p; int top=-1; if(T!=NULL) p=T; while(top-1|p!=NULL) while(p!=NULL) top+; Sttop=p; p=p-lchild; if(top-1) p=Sttop; top-; printf(%c,p-data); p=p-rchild; printf(n); / 非递归后序遍历二叉树void noRecursivePostorder(Node

    5、 *T) Node *StTREEMAX,*p; int flag,top=-1; if(T!=NULL) do while(T!=NULL) top+; Sttop=T; T=T-lchild; p=NULL; flag=1; while(top!=-1&flag) T=Sttop; if(T-rchild=p) printf(%c,T-data); top-; p=T; else T=T-rchild; flag=0; while(top!=-1); printf(n); / 层次遍历二叉树,用queue数组充当顺序队列void LevelOrder(Node *T) Node *queu

    6、eTREEMAX, *p; int pre=-1, rear=-1; / 树根结点先进队 queue+pre=T; / 当队列不为空时,出队一个结点的同时将其左右孩子进队 while(pre-rear+TREEMAX)%TREEMAX!=0) p=queue+rear; / 出队一个结点并输出 printf(%3c, p-data); if(p-lchild!=NULL) / 左孩子存在则进队 queue+pre=p-lchild; if(p-rchild!=NULL) / 右孩子存在则进队 queue+pre=p-rchild; void list() printf(n); printf(n

    7、tt 二叉链表); printf(ntt*); printf(ntt* 1.建立二叉树 *); printf(ntt* 2.递归前序遍历 *); printf(ntt* 3.递归中序遍历 *); printf(ntt* 4.递归后序遍历 *); printf(ntt* 5.非递归前序遍历 *); printf(ntt* 6.非递归中序遍历 *); printf(ntt* 7.非递归后序遍历 *); printf(ntt* 8.层次遍历 *); printf(ntt* 9.清屏 *); printf(ntt* 0.退出程序 *); printf(ntt*); printf(ntt请输入菜单项:)

    8、;void main() Node *T=NULL; char a,b; b=m; while(b=m|b=M) list(); scanf(%c, &a); fflush(stdin); switch(a) case1: printf(ntt请按先序序列输入二叉树的结点(输入#表示结点为空):n); printf(ntt请输入根结点:); T=CreateBT(); printf(ntt二叉树成功建立-n); break; case2: printf(ntt该二叉树递归前序遍历为:); Preorder(T); break; case3: printf(ntt该二叉树递归中序遍历为:); I

    9、norder(T); break; case4: printf(ntt该二叉树递归后序遍历为:); Postorder(T); break; case5: printf(ntt该二叉树非递归前序遍历为:); noRecursivePreorder(T); break; case6: printf(ntt该二叉树非递归中序遍历为:); noRecursiveInorder(T); break; case7: printf(ntt该二叉树非递归后序遍历为:); noRecursivePostorder(T); break; case8: printf(ntt该二叉树的层次遍历序列为:); Leve

    10、lOrder(T); break; case9: system(cls); break; case0: b=n; break; default: printf(ntt*对不起,输入有误!*); /* 多项式运算【链式结构】*/#include stdio.h#include stdlib.htypedef struct _node float coe; int index; struct _node *next; Node, *NodePtr;/ 整理多项式链表,将链表中的结点根据各项指数进行升序排列void sortPoly(NodePtr list) NodePtr p=list-next

    11、, q=list, r, ptr; / 让p指向链表的第二个数据结点, / p为空则说明链表为空,不用整理了。 if(p) p=p-next; else return; / 先从链表的第一个数据结点后断开链表 ptr=q-next; ptr-next=NULL; / 再将链表的第二个直至最后一个数据结点依次插入链表 while(p) q=list; ptr=q-next; while(ptr-index index) q=ptr; ptr=ptr-next; if(ptr=NULL) break; if(ptr=NULL) q-next=p; ptr=p; p=p-next; ptr-next

    12、=NULL; else if(ptr-index = p-index) ptr-coe += p-coe; r=p-next; free(p); p=r; else if(ptr-index p-index) r=p-next; p-next=ptr; q-next=p; p=r; /* 创建一个多项式链表,返回创建链表的头指针 */NodePtr createPoly() int i=1, index; float coe; NodePtr resultPtr, q; / 开辟头结点空间 resultPtr = (NodePtr)malloc(sizeof(Node); resultPtr-

    13、next=NULL; printf(请输入多项式第%d项的系数和指数(输入0 0时结束):, i+); scanf(%f%d, &coe, &index); while(1) if(index & coe=0) printf(系数不能为0!n); else if(index=0 & coe=0) break; else / 开辟新结点空间 q=(NodePtr)malloc(sizeof(Node); q-coe=coe; q-index=index; q-next=NULL; / 将新结点插入多项式链表 q-next=resultPtr-next; resultPtr-next=q; / 输

    14、入下一项 printf(请输入多项式第%d项的系数和指数(输入0 0时结束):, i+); scanf(%f%d, &coe, &index); / 将输入的多项式链表整理后返回 sortPoly(resultPtr); return resultPtr;/ 判断多项式链表是否已输入或是否为空int isEmpty(NodePtr list1, NodePtr list2) if(list1=NULL) return 1; else if(list2=NULL) return 2; else if(list1-next=NULL) return -1; else if(list2-next=N

    15、ULL) return -2; else return 0;/ 两个多项式相加NodePtr addPoly(NodePtr list1, NodePtr list2) NodePtr resultPtr, p=list1-next, q=list2-next, r; if(isEmpty(list1, list2)=1) printf(多项式链表L1不存在,请先选择菜单1输入多项式L1!n); return NULL; else if(isEmpty(list1, list2)=2) printf(多项式链表L2不存在,请先选择菜单2输入多项式L2!n); return NULL; / 创建

    16、结果多项式的头结点 resultPtr=(NodePtr)malloc(sizeof(Node); resultPtr-next=NULL; while(p!=NULL & q!=NULL) if(p-index q-index) / 创建新结点 r=(NodePtr)malloc(sizeof(Node); r-coe=q-coe; r-index=q-index; r-next=NULL; / 将新结点插入结果链表 r-next=resultPtr-next; resultPtr-next=r; q=q-next; else if(p-index index) r=(NodePtr)mal

    17、loc(sizeof(Node); r-coe=p-coe; r-index=p-index; r-next=NULL; / 将新结点插入结果链表 r-next=resultPtr-next; resultPtr-next=r; p=p-next; else / 对应项相加系数不为0 if(p-coe+q-coe!=0) / 创建新结点 r=(NodePtr)malloc(sizeof(Node); r-coe=p-coe+q-coe; r-index=p-index; r-next=NULL; / 将新结点插入结果链表 r-next=resultPtr-next; resultPtr-nex

    18、t=r; p=p-next; q=q-next; / 如果某个链表中尚有多余结点尚未插入结果链表, / 则将剩余结点依次插入结果链表 while(p!=NULL) r=(NodePtr)malloc(sizeof(Node); r-coe=p-coe; r-index=p-index; r-next=NULL; / 将新结点插入结果链表 r-next=resultPtr-next; resultPtr-next=r; p=p-next; while(q!=NULL) r=(NodePtr)malloc(sizeof(Node); r-coe=q-coe; r-index=q-index; r-

    19、next=NULL; / 将新结点插入结果链表 r-next=resultPtr-next; resultPtr-next=r; q=q-next; return resultPtr;/ 两个多项式相减NodePtr subPoly(NodePtr list1, NodePtr list2) NodePtr resultPtr, p=list1-next, q=list2-next, r; if(isEmpty(list1, list2)=1) printf(多项式链表L1不存在,请先选择菜单1输入多项式L1!n); return NULL; else if(isEmpty(list1, li

    20、st2)=2) printf(多项式链表L2不存在,请先选择菜单2输入多项式L2!n); return NULL; / 创建结果多项式的头结点 resultPtr=(NodePtr)malloc(sizeof(Node); resultPtr-next=NULL; while(p!=NULL & q!=NULL) if(p-index q-index) / 创建新结点 r=(NodePtr)malloc(sizeof(Node); r-coe=-1*q-coe; r-index=q-index; r-next=NULL; / 将新结点插入结果链表 r-next=resultPtr-next;

    21、resultPtr-next=r; q=q-next; else if(p-index index) r=(NodePtr)malloc(sizeof(Node); r-coe=p-coe; r-index=p-index; r-next=NULL; / 将新结点插入结果链表 r-next=resultPtr-next; resultPtr-next=r; p=p-next; else / 对应项相减系数不为0 if(p-coe-q-coe!=0) / 创建新结点 r=(NodePtr)malloc(sizeof(Node); r-coe=p-coe-q-coe; r-index=p-inde

    22、x; r-next=NULL; / 将新结点插入结果链表 r-next=resultPtr-next; resultPtr-next=r; p=p-next; q=q-next; / 如果某个链表中尚有多余结点尚未插入结果链表, / 则将剩余结点依次插入结果链表 while(p!=NULL) r=(NodePtr)malloc(sizeof(Node); r-coe=p-coe; r-index=p-index; r-next=NULL; / 将新结点插入结果链表 r-next=resultPtr-next; resultPtr-next=r; p=p-next; while(q!=NULL)

    23、 r=(NodePtr)malloc(sizeof(Node); r-coe=-1*q-coe; r-index=q-index; r-next=NULL; / 将新结点插入结果链表 r-next=resultPtr-next; resultPtr-next=r; q=q-next; return resultPtr;/ 两个多项式相乘NodePtr multiPoly(NodePtr list1, NodePtr list2) NodePtr p, q, r, resultPtr; if(isEmpty(list1, list2)=1) printf(多项式链表L1不存在,请先选择菜单1输入

    24、多项式L1!n); return NULL; else if(isEmpty(list1, list2)=2) printf(多项式链表L2不存在,请先选择菜单2输入多项式L2!n); return NULL; else if(isEmpty(list1, list2)=-1 | isEmpty(list1, list2)=-2) / 给相乘的结果多项式链表开辟头结点 resultPtr=(NodePtr)malloc(sizeof(Node); resultPtr-next=NULL; return resultPtr; / 给相乘的结果多项式链表开辟头结点 resultPtr=(NodePtr)malloc(sizeof(Node); resultPtr-next=NULL; p=list1-next; q=list2-next; while(p) / 只要p不为空,则将p指向的结点和另一链表的所有结点相乘, / 并将相乘的每个结点插入到结果链表resultPtr


    注意事项

    本文(数据结构课程设计参考答案a组.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开