西南交通大学计算机专业考研真题答案详解11:2007年算法设计题
2018-11-11 20:05
459 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haimianjie2012/article/details/83961547
更多西南交通大学真题,参考:西南交通大学计算机考研——数据结构真题系列
一、考研真题
3、从键盘输入任意一个大于等于2的自然数m,将m写成所有素因子乘积的形式,例如,
若输入:13,则你的输出应该: 13=13
若输入:420,则你的输出应该是:420=2*2*3*5*7
4、编写一个算法将一个带头结点的单链表A分解成两个单链表A和B,使得A链表中含有原链表A中序号为奇数的元素,而B链表中含有原链表A中序号为偶数的元素,且保持原来的相对顺序。
5、试编写一个算法,判断给定的二叉树是否是二叉排序树。假定二叉树种结点的为大于0的整数。
二、真题解析
3、从键盘输入任意一个大于等于2的自然数m,将m写成所有素因子乘积的形式,例如,
[code]#define QElemType int #define MAXQSIZE 100 typedef struct { QElemType base[MAXQSIZE]; int rear;//指向循环队列中队尾元素的位置 int length;//表示队列中所含数据元素的个数 }SqQueue; SqQueue Q; void FactorFind(int num) { SqQueue m_q; m_q.rear=0; m_q.length=0; int len=sqrt((float)num); int m_num=num; for (int i=2;i<=num;i++) { while (true) { if (m_num%i==0) { m_q.base[m_q.rear]=i; m_q.rear++; m_q.length++; m_num=m_num/i; } else { break; } } } if (m_q.length==1) { printf("%d=%d\n",num,num); } if (m_q.length>=2) { printf("%d=%d",num,m_q.base[0]); for (int i=1;i<m_q.length;i++) { printf("*%d",m_q.base[i]); } printf("\n"); } }
测试代码:
[code]int _tmain(int argc, _TCHAR* argv[]) { FactorFind(420); FactorFind(13); FactorFind(6); int a=0; return 0; }
测试结果:
4、编写一个算法将一个带头结点的单链表A分解成两个单链表A和B,使得A链表中含有原链表A中序号为奇数的元素,而B链表中含有原链表A中序号为偶数的元素,且保持原来的相对顺序。
链表结构定义:
[code]typedef struct LNode { int data; struct LNode* next; }LNode,*LinkList;
单链表A分解成单链表A和B:
[code]//链表A中结点按序号的奇偶性分解到表A或表B中 LNode* SeparateLNode(LNode* La) { LNode* Lb; //记录表A中结点的序号 int m_num=0; Lb=(LNode*)malloc(sizeof(LNode)); Lb->next=NULL; //paTail,pbTail分别指向创建的La和Lb的尾结点 LNode *paTail,*pbTail,*pCur; paTail=La; pbTail=Lb; pCur=La->next; La->next=NULL; while(pCur!=NULL) { m_num++; if (m_num%2==0) { pbTail->next=pCur; pbTail=pCur; } else { paTail->next=pCur; pbTail=pCur; } pCur=pCur->next; }//while paTail->next=NULL; pbTail->next=NULL; return Lb; }
类似考题:2010年第四题,2011年第四题,2014年第三题,
5、试编写一个算法,判断给定的二叉树是否是二叉排序树。假定二叉树种结点的为大于0的整数。
[code]#define MIN -256; typedef int TElemType; typedef struct BiTNode { TElemType data; struct BiTNode *lchild,*rchild; //左右孩子指针 }BiTNode,*BiTree; //判断一棵二叉树是不是二叉排序树 //思路:二叉排序树的特点是,若左子树非空,则左子树上结点的值均小于根结点的值; //若右子树非空,则右子树上结点的值均大于根结点的值。所以根据这一特点,可以看出 //二叉排序树的中序遍历是一个递增序列。 int prev = MIN; int flag = true; bool InOrderTraverse(BiTree T) { if(T->lchild != NULL && flag) { InOrderTraverse(T->lchild); } if(T->data<prev) { flag = false; } prev = T->data; if(T->rchild != NULL && flag){ InOrderTraverse(T->rchild); } return flag; }
参考文献:
https://www.geek-share.com/detail/2719152922.html
更多西南交通大学真题,参考:西南交通大学计算机考研——数据结构真题系列
相关文章推荐
- 西南交通大学计算机专业考研真题答案详解0:2018_959_据结构算法与程序设计
- 2007年内蒙古大学考研计算机真题__算法设计
- 2008年内蒙古大学考研计算机真题__算法设计
- 2006年内蒙古大学考研计算机真题__算法设计
- 西南交通大学计算机学硕——数据结构真题6:2005年程序与算法设计题
- 西南交通大学计算机学硕——数据结构真题5:2006年程序与算法设计题
- 西南交通大学计算机学硕——数据结构真题1:2017年程序与算法设计题
- 2005年内蒙古大学考研计算机真题__算法设计
- GZIP压缩原理分析(31)——第五章 Deflate算法详解(五22) 动态哈夫曼编码分析(11)构建哈夫曼树(03)
- 2015考研计算机专业基础综合试题真题及答案(1)
- 2016考研真题以及答案
- Facade模式详解--设计模式(11)
- 重庆大学2007年考研计算机专业试卷(计算机网络&数据结构)
- 2017考研真题以及答案
- 美团点评2017秋招笔试真题-算法工程师A 部分详解
- 【算法】算法设计与分析试题(含答案)
- MySQL索引设计背后的数据结构及算法详解
- OpenCV 2 学习笔记(11): 算法的基本设计模式<2>:使用Controller
- 2015年5月信息系统项目管理师综合知识真题详解 11-20题
- 算法分析与设计-11-最长递增子序列的动态规划算法