当前位置: 首页 > news >正文

2017年某高校848数据结构真题复习

  1. 数据是对客观事物的符号表示

  2. 元素之间的关系不同,通常由四类基本结构————集合,线性结构,树形结构,图状结构

  3. 算法的五个特性——出入确可穷

     1个或多个输出
     0个或多个输入
     确定性
     可行性
     有穷性
    
  4. 求下列程序段的时间复杂度

     for(i=1;i<=n;i++)
     	for(j=1;j<=n;j++)
     	{
     		C[i][j]=0;
     		for(k=1;k<=n;k++)
     			C[i][j]+=a[i][k]*B[k][j]	
     	}	
    

我的理解:外圈有效循环n次,中圈执行n次,内圈执行n次,就是O(n^3)

  1. 再长度为n的顺序表的第i个元素a之前插入一个元素,需要移动n/2个元素

  2. 入栈顺序位abcdefg,出栈第一个元素是g,则出栈第五个元素是?

     我的理解:
     g第一个出来,那abcdef也就都进去了,
     所以第五个出来的只能是c
    
  3. 深度为10的满二叉树,有几个节点

     (2^10)-1
    
  4. 二叉树中有100个度为2的节点,则该二叉树有几个叶子节点

     性质3,叶子节点=度为2的节点数+1=101
    
  5. 无向图有20个顶点,当有多少条边时,称为完全无向图

    我的理解:完全无向图:该图中每条边都没有方向,任意两个顶点间都存在边 ,三个顶点,第一个顶点射出两条边,第二个顶点射出一条边,所以20个顶点就是1+2+3+4+5+…+19=190

  6. 不稳定的排序:快希选堆

  7. 稳定的排序:冒泡,插入,排序

  8. 循环队列的最大长度为6,队列中已有3个元素,对头元素是a,队尾元素是c,依次进行三个步骤,d入队,e入队,一个元素出队。求front,rear下标
    请添加图片描述
    我的理解:循环队列,入队是rear+1,出队是front+1
    d入队,e入队,队列的r+2到1了,一个元素出队f+1到3

  9. 二叉树的后序遍历为DCBFJIHGEA,中序为BCDAFEHJIG,画出二叉树求先序
    我的理解:根据后序遍历得到A为根,看A在中序哪里,是不是在中间,就说明,根的左边有BCD,根的右边有FEHJIG。再看后序遍历的,后序遍历的是从右向左看噢,所以看完了根,再看E,中序里E再A的左边,也就是说E是A的右孩子,记住先看根节点是谁,怎么看根节点是谁呢,先序的第一个元素就是根节点,因为先序遍历时是根左右嘛,后序遍历的最后一个节点是根节点,因为后序遍历的是左右根。找到根节点是谁之后,根据中序遍历看看其他节点大致的分布在根节点的两边,再根据先序从左往右,后序从右往左的一个一个找元素,找到一个元素拿到中序里看他在父节点的哪边。再写出他的先序遍历,先序是根左右,ABCDEFGHIJ请添加图片描述

  10. 关键字序列为12,25,36,80,66,72构造二叉排序树,求平均查找长度
    我的理解:第一个关键字为根,大于他的为右孩子,小于它的为左孩子,画出来就行了,平均查找长度,关键字分布的层数相乘 (1+2+3+4+5+6)/6=21/6=3.5
    请添加图片描述

  11. 12,8,6,20,36,25,5画出哈夫曼树,求带权路径长度
    我的理解:每次选最小的两个数相加加完后,整理一下树,再看每个叶子节点的权长,最后相加,权就是边嘛,全部相加就是[(20+25+36)x2+12x3+8x4+(5+6)x5]/7=285/7
    请添加图片描述
    16.无向图的邻接表请添加图片描述
    E到1,2,3,4,5然后为空,1,2,3,4,5分别表示ABCDF,这么画就ok了
    求A的度,就是看A有几条边呗,A的度为2,以B出发求深度优先,B-A-E-F-C-D,深度优先就是一条路走到低,到低了再返回上一步,举个例子,B先到的A,再就从A开始走,A走到E,E可以随便走一个没有走过的,比如E-F,F再走C,C下一步没有未被访问的点了,就回退到F,再退到E,E发现D没被访问,于是就去访问D。书顺序就是B-A-E-F-C-D。广度优先呢,举个例子,E的广度优先搜索就是E-A-B-F-C-D也可以是E-D-C-F-B-A还几种都可以的,那B的广度优先搜索遍历呢B-A-E,B到了A,E,E可以到-F-C-D。所以结果可以是B-A-E-F-C-D

  12. 直接插入排序
    我的理解:直接插入排序是从第二个数开始,依次和前面的数比较,前面的数如果大于它,前面的数就后移,这就是大概思路

     int sort(int A[],int length)
     {
     	int i,j,temp;
     	for(i=1;i<length;i++) #这里的i表示下标
     	{	
     		temp=A[i];
     		for(j=i-1;j>=0&&A[j]>A[I];j--)
     		{
     				A[j+1]=A[j]; 
     				#前面存在一个大于A[i]的数就把大于A[i]的数后移
     				#不用担心是否存在这样一种情况 9,2,3 
     				#A[i]为3,2小于3,则不动,j--,A[j]=9,9>3就要后移
     				#注意哈,不存在以上这种情况,9,2早就被循环给调正了,
    		}
    		A[j+1]=temp;
    		#假如是1,2,3这种情况
    		#A[i]=2,A[j]=1,1不小于2,所以j不--,跳出循环,再执行A[j+1]=temp,还是把2赋值给了2,也没有影响噢。
    	}
     }
    
  13. 简单选择排序
    我的理解:从第一个数开始,与自己和其他数比较,存在一个小于自己的数时,记住他的下标,再从该下标往后找一个小于该下标的数,记住新的小数的下标,直到找到结尾,找到结尾以后,就找到了最小的数的下标,利用temp与一个数交换位置,最小的数就去了头。再从第二个数开始,与自己和其他数比较,一旦找到一个小于自己的数,就记住他的下标,从该下标往后找一个更小的数,又记住更小的数的下标直到找到尾巴。再利用temp把最小的数放在第二个位置。再从第3个数开始…

    int select(int A[],int length)
    {
    	int i,j,temp,min;
    	for(i=0;j<length;i++)
    	{
    		min=i;
    		for(j=i;j<=length&&A[j]<A[min];j++)
    		{	
    			min=j;
    		}
    		temp=A[i];
    		A[i]=A[min];
    		A[min]=temp;
    	} 
    }
    
  14. 输出1000以内的质数
    我的理解:用一个for循环去让n除2到n-1,等于==0就不是

    int prime(int n) #传入一个n进来
    {
    	int j;
    	for(j=2;j<n;i++)
    		if(n%j==0)
    			return 0;
    	return 1;
    }
    int main()
    {
    	int i,a=0;
    	for(i=2;i<1001;i++)
    	{
    		if(prime(i))
    		{	
    			printf(“%d”,i);
    			a++;
    			if(a%10==0&&a!=0)
    				printf(“/n”);
    		}
    	}
    }
    

我的理解:传入一个n到prime,就需要j从2开始到n-1,n一个一个除,需要从2除到n-1都不为0,则n为质数,当n为质数时prime返回1,if真,执行:打印i,且a++,a加到10或者20,30之类的,就打印一个换行符,

相关文章:

  • python正态分布中的normal函数
  • 场景金融持续引发行业关注,4.0时代打造金融服务新生态
  • 大数据面试重点之mysql篇
  • 【网络安全篇】JavaSript基础内容大全
  • 【数据结构与算法】时间复杂度和空间复杂度
  • 问:毁掉一个人,有多容易?答:年龄到了就可以
  • 最新|全新风格原创YOLOv7、YOLOv5和YOLOX网络结构解析图
  • 100个Python实战项目(十二)Python 并发图像下载器
  • RocketMQ 基础模型
  • java计算机毕业设计校园快递代领系统源程序+mysql+系统+lw文档+远程调试
  • 【Python】列表list
  • 如何在自己电脑上配置开发深度学习项目(windows)
  • 麻雀优化CNN超参数用于回归MATLAB
  • 激光切割教程(有线版)
  • 乘风而起!企业级应用软件市场迅猛发展,有哪些机会可以把握?
  • ➹使用webpack配置多页面应用(MPA)
  • 0x05 Python数据分析,Anaconda八斩刀
  • Android 控件背景颜色处理
  • Docker: 容器互访的三种方式
  • happypack两次报错的问题
  • JDK 6和JDK 7中的substring()方法
  • KMP算法及优化
  • laravel with 查询列表限制条数
  • maven工程打包jar以及java jar命令的classpath使用
  • miaov-React 最佳入门
  • Shadow DOM 内部构造及如何构建独立组件
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 入口文件开始,分析Vue源码实现
  • 网页视频流m3u8/ts视频下载
  • 以太坊客户端Geth命令参数详解
  • 用 Swift 编写面向协议的视图
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • ionic入门之数据绑定显示-1
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​力扣解法汇总946-验证栈序列
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #git 撤消对文件的更改
  • #LLM入门|Prompt#3.3_存储_Memory
  • (27)4.8 习题课
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (AngularJS)Angular 控制器之间通信初探
  • (TOJ2804)Even? Odd?
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (剑指Offer)面试题34:丑数
  • (九)c52学习之旅-定时器
  • (力扣)循环队列的实现与详解(C语言)
  • (排序详解之 堆排序)
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .net CHARTING图表控件下载地址