数据结构与算法第八套试卷

1.建立一个长度为n的有序单链表的时间复杂度

0(n^2)
在这里插入图片描述

2.哈希算法

key%p:p最好为质数
在这里插入图片描述
如果两个关键字的值不等但哈希函数值相等,则称这两个关键字为同义词(正确);

3.二分查找

注意: 二分查找是向下查询的
在这里插入图片描述
二分查找,因为它是顺序表,所以直接 1.(1+14)/2=7>4 r=6 2.(1+6)/2=3<4 l=4 3.(4+6)/2=5>4 r=4 (4+4)/2=4 7 3 5 4

4.DFS和BFS

深度优先遍历的思想类似于树的先序遍历。其遍历过程可以描述为:从图中某个顶点v出发,访问该顶点,然后依次从v的未被访问的邻接点出发继续深度优先遍历图中的其余顶点,直至图中所有与v有路径相通的顶点都被访问完为止;
在这里插入图片描述
BFS是根据节点的与节点之间的距离长度来的——>先遍历与顶点a邻接的顶点,因此前面是abce,直接排除ACD,选B

5.快速排序(补)

当数列越无序,快速排序的时间复杂度越低,最低为0(nlogn)
快速排序在基本有序的时候算法时间复杂度是最坏的,此时为0(n^2)
在这里插入图片描述

6.数据结构

1.线性结构是一个有序数据元素的集合。 其中数据元素之间的关系一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。
常用的线性结构有:线性表,栈,队列,双队列,数组,串。

2.非线性结构中各个数据元素不再保持在一个线性序列中,每个数据元素可能与零个或者多个其他数据元素发生联系。根据关系的不同,可分为层次结构和群结构。
常见的非线性结构有:二维数组,数组,广义表,树(二叉树等),图。(其中数组是由多个一维数组组成的,所以不再是线性结构)

7.链表

非空的双向循环链表中任何结点的前驱指针不为空。(正确)

8.希尔排序

在这里插入图片描述
(49,13,27,50,76,38,65,97)
在这里插入图片描述

9.树的遍历:

A
在这里插入图片描述
在这里插入图片描述

10.最小生成树:

在这里插入图片描述
【答案】n - 1
连通图:无向图中,对于图中任意两个顶点之前有路径,则称此图为连通图。n个顶点构成连通图它的边有多种可能,不使用图的边数来计算最小生成树的变数。
生成最小生成树需要包含图中各点,因此连接的边数为n - 1

11.堆的定义:

在这里插入图片描述

在这里插入图片描述

大题

1.统计二叉树中节点的个数

int count=0;
void math_count(Bitree* bt,int *count){
  //1.base:当前节点不为空,+1
  if(bt==NULL){
    return;
  }
  //2.前序位置:节点数+1
  *count++;
  //3.递归当前根节点的左右子树
  math_count(bt->lchild,count);
  math_count(bt->rchild,count);
}

2.选择排序

void select_sort(Node* head){
  Node* current=head;
  while(current){ //选择外层节点
    Node* temp=current->next; //内层比较节点
    while(temp){
       if(temp->data<current->data){
         int temp_data=current->data;
         current->data=temp->data;
         temp->data=temp_data; 
       }
       temp=temp->next; //内层指针更新
    }
    current=current->next;
  }
}

3.插入排序

void insert_sort(int[]nums){
   //1.插入排序是从第二个元素开始的
   for(int i=1;i<nums.length;i++){
     int j=i;
     //2.从后往前遍历,将元素插入到合适的位置
     while(j>0&&nums[j]<nums[j-1]){
       //交换
       int temp=arr[j-1];
       arr[j-1]=arr[j];
       arr[j]=temp;
       j--;  
     }
   } 
}

4.节点所在层数

int level=0;
//寻找target所在的层数
void math_level(Bitree* bt,int target){
   //1.base
   if(bt==NULL) return;
   level++;
   //2.前序:判断target在哪个位置
   if(bt->data==target) return; //当前根节点的data=target,return
   else if(bt->lchild&&bt->data>target) math_level(bt->lchild,target); //递归搜索当前节点的左子树
   else if(bt->rchild&&bt->data<target) math_level(bt->rchild,target); //递归右子树 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fairy要carry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值