面试题(2)

来源:互联网 发布:手机淘宝怎么改中评 编辑:程序博客网 时间:2024/06/05 22:44

  • 有哪几种表的实现方式:顺序实现(顺序表:用一组地址连续的存储单元依次存储线性表的数据元素)和链式实现
    • 使用顺序实现时,缺点在于需要预先分配表的大小,在超过原有大小后需要重新分配连续的空间;链式实现不用预先分配大小,但是需要额外的空间来存储节点指针以实现表的逻辑关系
  • 链表的分类:单链表、循环链表和双向链表
    • 单链表:指的是链表中节点指针只能指向链表中的下一个元素或者为空
    • 双向链表:每个链表节点既有指向下一个节点的指针,又有指向前一个节点的指针
    • 循环链表:在单链表和双向链表基础上,将这两种链表的最后一个节点指向第一个节点从而实现循环

队列

队列是一种特殊的线性表(先进先出),队列的插入和删除操作分别在线性表的两端进行

  • 什么是队列:队列是一种线性表,队列的插入(队尾)和删除操作(队头)分别在表的两端进行,是一种先进先出的线性表

  • 什么是栈:通过对线性表的插入和删除操作(栈顶)进行限制而得到(插入和删除操作都必须在表的同端完成),是一个先进后出的线性表

  • 如何访问栈中的元素:主要是针对栈顶的元素进行访问,不能直接访问其他位置的栈元素

树是一种数据结构,它是由n(n>=1)个有限节点组成的一个具有层次关系的集合

  • 树的分类:根据树的节点的关系不同,可以分为有序树(子树的位置自左向右有次序关系,顺序决定了大小)和无序树;
    • 树是n个节点的有限集T;T为空时称为空树,否则满足如下两个条件:
      • 有且仅有一个特定的称为根的节点
      • 其余的节点可分为m个(m>=0)个互不相交的子集T1、T2…Tm,其中每个子集本身又是一棵树,并称其为根的子树
  • 如何对树进行遍历:遍历就是通过一种方法按照一定的顺序访问一棵树的过程。
    • 深度优先遍历:先访问根节点,再逐个访问子节点
    • 广度优先遍历:对树中的节点逐层进行访问
  • 二叉树遍历:先序遍历、中序遍历和后序遍历
    • 先序遍历:访问根节点;先序遍历左子树;先序遍历右子树
    • 中序遍历:中序遍历左子树;访问根节点;中序遍历右子树
    • 后序遍历:后序遍历左子树;后序遍历右子树;访问根节点
  • 二叉树可分为满二叉树、完全二叉树
  • 如何计算二叉树的高度:通过使用后序遍历的方式计算二叉树的高度。可以先计算左子树的高度hl,后计算右子树的高度hr,然后树的高度则是h1和hr中较大的值加上1
  • 如何计算二叉树的节点数:二叉树的遍历就是访问二叉树的全部节点,且每个节点只访问一次。可以在3种遍历方法中,在对二叉树进行遍历时使用一个变量计算二叉树的节点数。

排序

冒泡排序:基本原理是依次比较相邻的两个数,将大数放在下面,小数放在前面。
- 什么是选择排序:从需要排序的队列数据中选择最小的同第一个值交换,再从剩下的部分中选择最小的与第二个交换,依次循环下去,最后实现全队列的排序
- 什么是直接插入排序:依次取待排列数组的元素,将其插入到前面有序的数组中
- 快速排序:
- (1)首先对待排序的序列进行分解,任取序列中的某个数据元素作为枢轴,序列被划分成两个子序列,左侧子序列所有元素均小于枢轴元素,右侧子序列所有元素均大于枢轴元素,枢轴位于两个子序列中间
- (2)递归调用快速排序
- (3)最后两种子排序已经排序,合并
这里写图片描述

原创粉丝点击