没有合适的资源?快使用搜索试试~ 我知道了~
数据结构常见笔试题汇总 C语言的,笔试 面试 很好的资料
资源推荐
资源详情
资源评论
数据结构笔试题基础(一)
2008 年 03 月 28 日 星期五 下午 11:52
第一章 数据结构与算法
一.算法的基本概念
计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法。
1.算法的基本特征:可行性,确定性,有穷性,拥有足够的情报。
2.算法的基本要素:算法中对数据的运算和操作、算法的控制结构。
3.算法设计的基本方法:列举法、归纳法、递推、递归、减半递推技术、回溯
法。
4.算法设计的要求:正确性、可读性、健壮性、效率与低存储量需求
二.算法的复杂度
1.算法的时间复杂度:指执行算法所需要的计算工作量
2.算法的空间复杂度:执行这个算法所需要的内存空间
三.数据结构的定义
1.数据的逻辑结构:反映数据元素之间的关系的数据元素集合的表示。数据的
逻辑结构包括集合、线形结构、树形结构和图形结构四种。
2.数据的存储结构:数据的逻辑结构在计算机存储空间种的存放形式称为数据
的存储结构。常用的存储结构有顺序、链接、索引等存储结构。
四.数据结构的图形表示:
在数据结构中,没有前件的结点称为根结点;没有后件的结点成为终端结点。
插入和删除是对数据结构的两种基本运算。还有查找、分类、合并、分解、复
制和修改等。
五.线性结构和非线性结构
根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为
两大类型:线性结构和非线性结构。
线性结构:非空数据结构满足:有且只有一个根结点;每个结点最多有一个前
件,最多只有一个后件。非线性结构:如果一个数据结构不是线性结构,称之
为非线性结构。
常见的线性结构:线性表、栈、队列
六.线性表的定义
线性表是 n 个元素构成的有限序列(A1,A2,A3……)。表中的每一个数据
元素,除了第一个以外,有且只有一个前件。除了最后一个以外有且只有一个
后件。即线性表是一个空表,或可以表示为(a1,a2,……an), 其中
ai(I=1,2,……n)是属于数据对象的元素,通常也称其为线性表中的一个结点。
非空线性表有如下一些特征:
(1)有且只有一个根结点 a1,它无前件;
(2)有且只有一个终端结点 an,它无后件;
(3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有
一个后件。线性表中结点的个数 n 称为线性表的长度。当 n=0 时称为空表。
七.线性表的顺序存储结构
线性表的顺序表指的是用一组地址连续的存储单元依次存储线性表的数据元
素。
线性表的顺序存储结构具备如下两个基本特征:
1.线性表中的所有元素所占的存储空间是连续的;
2.线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。
即线性表逻辑上相邻、物理也相邻,则已知第一个元素首地址和每个元素所占
字节数,则可求出任一个元素首地址。
假设线性表的每个元素需占用 K 个存储单元,并以所占的第一个单元的存储地
址作为数据元素的存储位置。则线性表中第 i+1 个数据元素的存储位置
LOC(ai+1)和第 i 个数据元素的存储位置 LOC(ai)之间满足下列关系:
LOC(ai+1)=LOC(ai)+K
LOC(ai)=LOC(a1)+(i-1)*K ①
其中,LOC(a1)是线性表的第一个数据元素 a1 的存储位置,通常称做线性表
的起始位置或基地址。
因为在顺序存储结构中,每个数据元素地址可以通过公式①计算得到,所以线
性表的顺序存储结构是随机存取的存储结构。
在线性表的顺序存储结构下,可以对线性表做以下运算:
插入、删除、查找、排序、分解、合并、复制、逆转
八.顺序表的插入运算
线性表的插入运算是指在表的第 I 个位置上,插入一个新结点 x,使长度为 n
的线性表(a1,a2 …ai…an)变成长度为 n+1 的线性表(a1,a2…x,ai…an).
该算法的时间主要花费在循环的结点后移语句上,执行次数是 n-I+1。
当 I=n+1,最好情况,时间复杂度 o(1) 当 I=1, 最坏情况,时间复杂度 o(n)
算法的平均时间复杂度为 o(n)
九.顺序表的删除运算
线性表的删除运算是指在表的第 I 个位置上,删除一个新结点 x,使长度为 n
的线性表(a1,a2 …ai…an)变成长度为 n-1 的线性表(a1,a2…ai-1,ai+1…
an).
当 I=n,时间复杂度 o(1),当 I=1,时间复杂度 o(n) ,平均时间复杂度为 o(n)
十.栈及其基本运算
1.什么是栈? 栈实际上也是一个线性表,只不过是一种特殊的线性表。栈是只
能在表的一端进行插入和删除运算的线性表,通常称插入、删除这一端为栈顶
(TOP),另一端为栈底(BOTTOM)。当表中没有元素时称为空栈。栈顶元
素总是后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插
入的元素,从而也是最后才能被删除的元素。
假设栈 S=(a1,a2,a3,……an),则 a1 称为栈底元素,an 称为栈顶元素。
栈中元素按 a1,a2,a3……an 的次序进栈,退栈的第一个元素应该是栈顶元
素。即后进先出。
2.栈的顺序存储及其运算
用 S(1:M)作为栈的顺序存储空间。M 为栈的最大容量。
栈的基本运算有三种:入栈、退栈与读栈顶元素。
入栈运算:在栈顶位置插入一个新元素。
首先将栈顶指针进一(TOP+1),然后将新元素插入到栈顶指针指向的位置。
退栈运算:指取出栈顶元素并赋给一个指定的变量。
首先将栈顶元素赋给一个指定的变量,然后将栈顶指针退一(TOP-1)
读栈顶元素:将栈顶元素赋给一个指定的变量。栈顶指针不会改变。
十一.队列及其基本运算
1.什么是队列
队列是只允许在一端删除,在另一端插入的顺序表,允许删除的一端叫做对
头,允许插入的一端叫做对尾。
队列的修改是先进先出。往队尾插入一个元素成为入队运算。从对头删除一个
元素称为退队运算。
2.循环队列及其运算
在实际应用中,队列的顺序存储结构一般采用循环队列的形式。所谓循环队
列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状
空间。在循环队列中,,用队尾指针 rear 指向队列中的队尾元素,用排头指针
front 指向排头元素的前一个位置,因此,从排头指针 front 指向的后一个位置
直到队尾指针 rear 指向的位置之间所有的元素均为队列中的元素。
在实际使用循环队列时,为了能区分队满还是队列空,通常需要增加一个标志
S:
队列空,则 S=0,rear=front=m 队列满,则 S=1,rear=front=m
循环队列主要有两种基本运算:入队运算和退队运算
n 入队运算
指在循环队列的队尾加入一个新元素,首先 rear=rear+1,当 rear=m+1
时,置 rear=1,然后将新元素插入到队尾指针指向的位置。当
S=1,rear=front,说明队列已满,不能进行入队运算,称为“上溢”。
n 退队运算
指在循环队列的排头位置退出一个元素并赋给指定的变量。首先
front=front+1,并当 front=m+1 时,置 front=1,然后将排头指针指向的元
素赋给指定的变量。当循环队列为空 S=0,不能进行退队运算,这种情况成为
“下溢”。
十二.线性单链表的结构及其基本运算
1.线性单链表的基本概念
一组任意的存储单元存储线性表的数据元素,因此,为了表示每个数据元素 ai
与其直接后继数据元素 ai+1 之间的逻辑关系,对数据元素 ai 来说,除了存储
其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储
位置)。这两部分信息组成数据元素 ai 的存储映象,成为结点。它包括两个
域:其中存储数据元素信息的域称为数据域,存储直接后继存储位置的域称为
指针域。指针域中存储的信息称做指针或链。N 个结点链结成一个链表,即为
线性表(a1, a2,……,an)的链式存储结构。又由于此链表的每个结点中只包含
一个指针域,故又称线性链表或单链表。
有时,我们在单链表的第一个结点之前附设一个结点,称之为头结点,它指向
表中第一个结点。头结点的数据域可以不存储任何信息,也可存储如线性表的
长度等类的附加信息,头结点的指针域存储指向第一个结点的指针(即第一个
元素结点的存储位置)。
在单链表中,取得第 I 个数据元素必须从头指针出发寻找,因此,单链表是非
随机存取的存储结构 链表的形式:单向,双向
2.线性单链表的存储结构
3 带链
剩余10页未读,继续阅读
资源评论
左边88
- 粉丝: 0
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功