数据结构笔试题的笔记

本文详细探讨了数据结构中的关键概念,包括存储密度、链队、链表、顺序表和线性表的特点。还深入讨论了链表的效率,二叉树与红黑树的特性,并介绍了哈夫曼编码。此外,文章还涉及了存储结构的分类,如随机存取、顺序存取等,并分析了算法的时间复杂度和哈希表在海量数据处理中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.存储密度的概念

存储密度=单链表数据项所占空间/结点所占空间;一般情况下,因为结点中包含数据项和指针,所以正常而言密度是小于1的。

2.链队不是链表

对于链队而言,删除操作只能在对头操作,而插入只能在对位操作,这里需要注意的是当链队中只有一个元素的时候,那么在进行删除的时候,她的头尾指针都是需要修改的

3.链表不能随机访问任何一个元素

4.顺序表

对于顺序表而言,每次进行删除某一个位置的元素(非末尾元素),都必须将后面的元素向前移,填补空缺

5.线性表(List)–一种数据结构

线性表:有序除头尾外其他每个节点有且仅有一个前继和一个后继表中的元素类型都相同
线性表(ADT)根据物理结构又分为顺序存储结构(元素连续存储、随机存取结构)和链式存储结构(元素分散存储);
顺序存储结构:指的是用一段地址连续的存储单元依次存储线性表的数据元素。线性表的顺序存储结构的存取操作复杂度为O(1),插入、删除操作复杂度为O(n),所以顺序存储结构的线性表适合存取不适合增删。
链式存储结构:指的是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。这里注意和顺序存储结构的区别,因为顺序存储结构是存储在相连地址的存储单元中,所以一个元素的下个元素就是该元素地址的下一个地址的元素,不需要存储它的后继的位置信息,而链式存储结构就一样了,由于它不要求连续的存储单元,所以它必须额外存储它的后继的地址单元。【注意:单链表的插入】如果将s插入到p的后面,应该是这样的s.next=p.next;p.next=s这两个语句千万能调换,否则链表将变成p–>s–>s而不是p–>s–>p.next的效果;C语言还有用数组来描述链表,这种方式称为静态链表。

6.链表的效率

表头*插入和删除速度很快,仅需要改变一两个引用,所以话费O(1)的时间。就平均而言,查找、删除和在指定节点后面插入都需要O(n)次比较,虽然在数组中也是比较O(n)次,但是链表仍然快一些,因为链表的删除不需要移动元素*。

7.二叉树

普通的二叉搜索树可以快速的找到给定关键字的数据,并且可以快速的插入和删除数据项,但是树插入的如果是有序数(正序或者逆序)的话,她的快速查找(插入、删除)的能力就会丧失了,因为此时它就变成非平衡树,非平衡树是没有快速查找的能力的。

8.红黑树

当插入节点时,要遵循红-黑规则,这时候插入的话树就是平衡的。红黑规则如下:(这里提一下平衡树的概念:<

1. 把一个链表反向,递归,非递归都写一遍。 1.试编写3个函数实现   (1)建立一个双向链表   (2)插入一个节点   (3)删除一个节点 2.自己定义数据结构,写出程序:二叉树的前序遍历。 3.实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数。 4.下面哪种排序法对12354最快 a quick sort b.buble sort c.merge sort 5.哪种结构,平均来讲,获取一个值最快 a. binary tree b. hash table c. stack 6.一个二叉树的三种遍历方法的输出结果 7.链表按升序打印每打印完一个节点就将该节点从链表中删除 8.选择一种算法来整理出一个链接表。你为什么要选择这种方法?现在用o(n)时间来做。 9. 用一种算法在一个循环的链接表里插入一个节点,但不得穿越链接表。    10.给两个变量,如何找出一个带环单链表中是什么地方出现环的? 11.哈希表和数组的定义,区别,优缺点。 12.链接表和数组之间的区别是什么? 任选一门语言,当场定义二叉排序树数据结构,写出两个函数:初始化,删除一个节点,20分钟 13. 递归的折半查找算法[不限语言] 14. 解释一下什么是B+树,如何实现B+树的查找和插入.(用图示) 15.实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数。 13.排序方法比较 (intel) 排序方法 平均时间 最坏时间 辅助存储 直接插入排序 O(N2) O(N2) O(1) 起泡排序 O(N2) O(N2) O(1) 快速排序 O(Nlog2N) O(N2) O(Nlog2N) 简单选择排序 O(N2) O(N2) O(1) 堆排序 O(Nlog2N) O(Nlog2N) O(1) 归并排序 O(Nlog2N) O(Nlog2N) O(n) 基数排序 O(d(n+radix)) O(d(n+radix)) O(radix) 17.一个链表的操作,注意代码的健壮和安全性。要求: (1)增加一个元素; (2)获得头元素; (3)弹出头元素(获得值并删除)。 18.内排序算法 19.折半查找的复杂度,证明 20.sizeof()和strlen()的使用. 21.顺序存储结构的优点,散列法的思想是什么? 22.汉罗塔算法,不能递归... 23.一个链表的结点结构 struct Node { int data ; Node *next ; }; typedef struct Node Node ; (1)已知链表的头结点head,写一个函数把这个链表逆序 ( Intel) (2)已知两个链表head1 和head2 各自有序,请把它们合并成一个链表 依然有序。 (3)已知两个链表head1 和head2 各自有序,请把它们合并成一个链表 依然有序,这次要求用递归方法进行。 ( Autodesk) 24.编最优化Bubble(int *pIntArray,int L),要求:交换元素不能用临时变量,如果有序需要最优。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值