ImageVerifierCode 换一换
格式:DOC , 页数:16 ,大小:88.50KB ,
资源ID:9452649      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

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

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

开通VIP折扣优惠下载文档

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

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

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


权利声明

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

注意事项

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

数据结构教程习题答案-李蓉蓉-安杨等编著第三版-第六章答案.doc

1、6.1 /********************************************* 题目:已知A[n]为整数数组,编写一个递归算法求n个元素的平均值 设计:狼影 时间;2012.10.1 *****************************************************/ # include # define size 100 float sum = 0; //函数声明 float cal_average(int *a,int i,int n); main() { int n; int i;

2、 float average; int a[size]; //输入数据的个数 printf("输入数据的个数\n"); scanf("%d", &n); //输入n个数据 printf("输入数据\n"); for(i = 0; i

3、 if(i>=n) return (sum/n); else { sum += a[i]; return (cal_average(a, i+1, n)); } } /*************************************** 输入数据的个数 5 输入数据 1 2 3 4 5 平均数数3.000000 Press any key to continue **********************************************/ 6.2 /*****************************

4、 题目;有一个不带表头结点的单链表,设计如下的递归算法:(下面的代码实现的顺序为了方便可能与问题的顺序不一致) 1.求以h为头指针的单链表的节点的个数 2.正向显示以h为头指针的单链表的所有节点值 3.反向显示以h为头指针的单链表的所有节点值 4.删除以h为头指针的单链表中值为x的第一个节点 5.删除以h为头指针的单链表中值为x的所有节点 6.输出以h为头指针的单链表中最大节点值 7.输出以h为头指针的单链表中最小节点值 设计;狼影 时间:2012.10.1 **********************************************

5、/ # include # include //节点类型按课本上的来写 typedef int ElemType; typedef struct node { ElemType data; struct node *next; }NODE; int number = 0; //函数声明 NODE *creat_list(void); void front_output(NODE *pHead); void back_output(NODE *pHead); int node_number(NODE *pHe

6、ad); int cal_max(NODE *pHead); int cal_min(NODE *pHead); NODE *delete_x(NODE *pHead, int x); NODE *delete_all_x(NODE *pHead, int x); main() { NODE *pHead; int max, min; int number, x; int sert; //首先先创建一个链表 printf("输入数据按0结束\n"); pHead = creat_list(); if(pHead!=NULL) { /

7、/下面正向输出内容 printf("正向输出的结果是\n"); front_output(pHead); printf("\n"); //反向输出链表内容 printf("反向输出的结果是\n"); back_output(pHead); printf("\n"); //求节点的个数 number = node_number(pHead); printf("节点的个数是%d\n", number); //输出最大值 max = cal_max(pHead); printf("最大值是%d\n", m

8、ax); //求最小值 min = cal_min(pHead); printf("最小值是%d\n", min); //删除链表中值为x的第一个元素 printf("输入删除的元素值\n"); scanf("%d", &x); do { printf("删除所有的x按1, 首个x按0\n"); scanf("%d", &sert); }while(sert<0||sert>1); switch(sert) { case 0: pHead = delete_x(pHead, x);

9、 printf("剩余的节点是\n"); front_output(pHead); printf("\n"); break; case 1: pHead = delete_all_x(pHead, x); printf("剩余的节点是\n"); front_output(pHead); printf("\n"); break; } } else printf("链表为空\n"); } //递归创建链表 NODE *creat_list(void) { ElemTy

10、pe n; NODE *pNow; scanf("%d", &n); if(0==n) return NULL; else { pNow = (NODE *)malloc(sizeof(NODE)); if(NULL==pNow) { printf("内存分配失败\n"); exit(-1); } pNow->data = n; pNow->next = creat_list(); } return pNow; } //正向输出链表内容 void front_output(NODE *pHead

11、) { if(NULL==pHead) return; else { printf("%d ", pHead->data); front_output(pHead->next); } } //反向输出链表的内容 void back_output(NODE *pHead) { if(NULL == pHead) return; else { back_output(pHead->next); printf("%d ", pHead->data); } } //求节点的个数 int node_number(

12、NODE *pHead) { if(NULL==pHead) return 0; else return (node_number(pHead->next)+1); } //求最大值 int cal_max(NODE *pHead) { int max, max1; if(pHead->next==NULL) max = pHead->data; else { max = pHead->data; max1 = (cal_max(pHead->next)); max = (max>max1)? max:max1;

13、 } return max; } //求最小值 int cal_min(NODE *pHead) { int min, min1; if(pHead->next == NULL) min = pHead->data; else { min = pHead->data; min1 = cal_min(pHead->next); min = (min

14、 NODE *pNow; //下面是把等于x节点之前的链断开,重新连接,把等于x节点之后的一部分链直接接到新形成的链的后面 if(pHead != NULL) { if(pHead->data != x) { pHead->next = delete_x(pHead->next, x); return pHead; } else { pNow = pHead; pHead = pHead->next; free(pNow); return pHead; } } } //删除所有的x

15、节点 NODE *delete_all_x(NODE *pHead, int x) { NODE *pNow; if(pHead!=NULL) { if(pHead->data!=x) { pHead->next = delete_all_x(pHead->next, x); return pHead; } else { pNow = pHead; pHead = pHead->next; free(pNow); return delete_all_x(pHead, x); } }

16、else return NULL; } /***************************************** 输入数据按0结束 1 2 3 4 2 7 2 0 正向输出的结果是 1 2 3 4 2 7 2 反向输出的结果是 2 7 2 4 3 2 1 节点的个数是7 最大值是7 最小值是1 输入删除的元素值 2 删除所有的x按1, 首个x按0 1 剩余的节点是 1 3 4 7 Press any key to continue ***************************************************

17、/ //另加皇后的问题(仅供参考) /****************************************** 题目:采用递归求解皇后的问题(n*n) 实践:狼影 时间:2012.10.1 *******************************************/ # include # include # define size 20 //函数的声明 void place(int row,int n); bool is_set(int row, int i); void print(

18、int n); int set[size]; int number = 0; main() { int n; printf("输入n的大小\n"); scanf("%d", &n); place(0,n); printf("八皇后安放的方式有%d种\n", number); } //安放皇后 void place(int row,int n) { int i; if(row>=n) { print(n); number++; fflush(stdin); getchar(); } for(i =

19、0; i

20、 i, j; int a[size][size]; for(i = 0; i

21、放的方式有2种 Press any key to continue ***************************************/ //迷宫的问题 /**************************** 题目:用栈输出所有可能的迷宫路径,并求最短路径长度与最短的路径 实践:狼影 时间:2012.9.18 **************************************/ /************************************\ 此题可以用递归很简单的就输出所有的路径,不过下面用自己建栈的方式 ********

22、/ # include # include # define size 256 char map[10][10] = { {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}, {'#', '0', '0', '0', '0', '0', '0', '0', '0', '#'}, {'#', '#', '0', '#', '#', '#', '0', '#', '0', '#

23、'}, {'#', '#', '0', '#', '0', '0', '0', '#', '0', '#'}, {'#', '0', '0', '0', '0', '0', '0', '#', '0', '#'}, {'#', '0', '#', '#', '0', '#', '0', '0', '0', '#'}, {'#', '0', '#', '#', '0', '0', '0', '#', '#', '#'}, {'#', '0', '#', '#', '#', '0', '0', '0', '0', '#'},

24、 {'#', '0', '0', '0', '0', '0', '#', '#', '0', '#'}, {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'} }; //定义节点 typedef struct { int x; int y; int di; }STATE; typedef struct { STATE state[size]; int top; }STACK; int sin = 0; //标记是不是有路径 int number =

25、0; int max = 65535; int clea; STATE arry[size];//存放最短路径 STATE cl[size];//存放最后的一条路径 //函数的声明 STACK *init_stack(void); void find_path(STACK *stack); void push_stack(STACK *stack, STATE st); bool is_empty(STACK *stack); void get_top(STACK *stack, STATE *st); bool is_through(STATE st); void p

26、op_stack(STACK *stack); void print_map(void); void shortest_path(STACK *stack); void clear_map(void); void re_paint(void); main() { STACK *stack; stack = init_stack(); printf("地图的入点是(1,1)出口点是(8,8)\n"); find_path(stack); if(0 == sin) printf("没有路径\n"); else { printf("一共有%

27、d条路径\n", number); printf("最短路径是\n"); re_paint(); print_map(); printf("\n"); } } //寻找路径 void find_path(STACK *stack) { //将入口点入栈 STATE st; st.x = 1; st.y = 1; st.di = -1; push_stack(stack, st); map[st.x][st.y] = '\1'; while(!is_empty(stack)) { get_top(stac

28、k, &st); if(8==st.x && 8==st.y) { sin = 1;//有路径的话sin标记为1 print_map(); printf("\n"); number++; shortest_path(stack); map[stack->state[stack->top].x][stack->state[stack->top].y] = '0'; pop_stack(stack); } else { while(st.di<4 && !is_through(st))//当 当

29、前点的四个方向没有浏览完并且浏览的方向不通时,循环 { st.di++; switch(st.di) //改变方向(有上下左右四个方向) { case 0: st.x = stack->state[stack->top].x-1; st.y = stack->state[stack->top].y; break; case 1: st.x = stack->state[stack->top].x; st.y = stack->state[stack->top].y+1;

30、 break; case 2: st.x = stack->state[stack->top].x+1; st.y = stack->state[stack->top].y; break; case 3: st.x = stack->state[stack->top].x; st.y = stack->state[stack->top].y-1; break; default: break; } } stack->state[stack->top].di = s

31、t.di; //记录当前点走向哪个方向的相邻点 if(is_through(st)) { st.di = -1; push_stack(stack, st); map[st.x][st.y] = '\1'; } else { map[stack->state[stack->top].x][stack->state[stack->top].y] = '0'; pop_stack(stack); } } } } //初始化队列 STACK *init_sta

32、ck(void) { STACK *stack = (STACK *)malloc(sizeof(STACK)); if(NULL == stack) { printf("内存分配失败\n"); exit(-1); } stack->top = -1; return stack; } //入队列 void push_stack(STACK *stack, STATE st) { stack->top++; stack->state[stack->top].di = st.di; stack->state[stack->top].x

33、 st.x; stack->state[stack->top].y = st.y; } //判断空 bool is_empty(STACK *stack) { if(-1 == stack->top) return true; else return false; } //获得栈顶元素 void get_top(STACK *stack, STATE *st) { if(is_empty(stack)) { printf("栈空\n"); return; } st->x = stack->state[stack-

34、>top].x; st->y = stack->state[stack->top].y; st->di = stack->state[stack->top].di; } //判断是不是可以通过 bool is_through(STATE st) { if('0' == map[st.x][st.y]) return true; else return false; } //出栈操作 void pop_stack(STACK *stack) { if(is_empty(stack)) { printf("栈空\n");

35、return; } else { stack->top--; } } //打印地图 void print_map(void) { int i, j; for(i = 0; i<10; i++) { for(j = 0; j<10; j++) { printf("%c ", map[i][j]); } printf("\n"); } } //寻找最短路径 void shortest_path(STACK *stack) { int i; //记录最后的路径,为了清除重绘 fo

36、r(i = 0; i<=stack->top; i++) { cl[i] = stack->state[i]; } clea = stack->top; //记下最短的路径坐标 if(stack->top top; for(i = 0; i<=stack->top; i++) { arry[i] = stack->state[i]; } } } //绘制最短路径地图 void re_paint(void) { int i; clear_map(); for(i = 0; i<=max;i++) { map[arry[i].x][arry[i].y] = '\1'; } } //将地图还原 void clear_map(void) { int i; for(i = 0; i<=clea; i++) { map[cl[i].x][cl[i].y] = '0'; } }

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

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

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

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

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

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

客服