数据结构ch3习题

合集下载

(完整word版)数据结构试题集(包含答案完整版)

(完整word版)数据结构试题集(包含答案完整版)

第一章概论一、选择题1、研究数据结构就是研究(D )。

A. 数据的逻辑结构B。

数据的存储结构C. 数据的逻辑结构和存储结构D。

数据的逻辑结构、存储结构及其基本操作2、算法分析的两个主要方面是( A )。

A。

空间复杂度和时间复杂度 B. 正确性和简单性C。

可读性和文档性D。

数据复杂性和程序复杂性3、具有线性结构的数据结构是( D )。

A。

图B。

树C。

广义表D。

栈4、计算机中的算法指的是解决某一个问题的有限运算序列,它必须具备输入、输出、( B )等5个特性。

A. 可执行性、可移植性和可扩充性B。

可执行性、有穷性和确定性C。

确定性、有穷性和稳定性 D. 易读性、稳定性和确定性5、下面程序段的时间复杂度是( C )。

for(i=0;i<m;i++)for(j=0;j〈n;j++)a[i][j]=i*j;A. O(m2) B。

O(n2) C。

O(m*n) D. O(m+n)6、算法是(D )。

A。

计算机程序 B. 解决问题的计算方法C。

排序算法 D. 解决问题的有限运算序列7、某算法的语句执行频度为(3n+nlog2n+n2+8),其时间复杂度表示( C )。

A。

O(n) B. O(nlog2n) C。

O(n2) D. O (log2n)8、下面程序段的时间复杂度为( C ).i=1;while(i<=n)i=i*3;A. O(n)B。

O(3n) C。

O(log3n) D. O(n3)9、数据结构是一门研究非数值计算的程序设计问题中计算机的数据元素以及它们之间的()和运算等的学科。

A. 结构B。

关系C。

运算D。

算法10、下面程序段的时间复杂度是(A )。

i=s=0;while(s<n){i++;s+=i;}A. O(n) B。

O(n2)C。

O(log2n)D。

O(n3)11、抽象数据类型的三个组成部分分别为(A)。

A. 数据对象、数据关系和基本操作B. 数据元素、逻辑结构和存储结构C. 数据项、数据元素和数据类型D. 数据元素、数据结构和数据类型12、通常从正确性、易读性、健壮性、高效性等4个方面评价算法的质量,以下解释错误的是()。

数据结构第三章的习题答案

数据结构第三章的习题答案

数据结构第三章的习题答案数据结构第三章的习题答案在学习数据结构的过程中,习题是巩固知识和提高能力的重要方式。

第三章的习题主要涉及线性表、栈和队列的实现和操作。

本文将对这些习题进行解答,并给出详细的步骤和思路。

1. 第一题要求实现一个线性表的插入操作。

线性表是一种常用的数据结构,它的特点是元素之间存在一对一的关系。

要实现插入操作,首先需要定义线性表的数据结构,可以使用数组或链表来实现。

然后,根据插入位置,将插入位置之后的元素依次后移,为要插入的元素腾出空间。

最后,将要插入的元素放入插入位置。

2. 第二题要求实现一个栈的压栈和出栈操作。

栈是一种后进先出(LIFO)的数据结构,可以使用数组或链表来实现。

压栈操作就是将元素放入栈顶,出栈操作就是将栈顶元素取出并删除。

要实现这两个操作,可以使用一个指针来指示栈顶位置,每次压栈时将指针加一,出栈时将指针减一。

需要注意的是,栈满时不能再进行压栈操作,栈空时不能进行出栈操作。

3. 第三题要求实现一个队列的入队和出队操作。

队列是一种先进先出(FIFO)的数据结构,同样可以使用数组或链表来实现。

入队操作就是将元素放入队尾,出队操作就是将队头元素取出并删除。

与栈不同的是,队列需要维护队头和队尾两个指针。

每次入队时将元素放入队尾,并将队尾指针后移一位;出队时将队头元素取出,并将队头指针后移一位。

需要注意的是,队列满时不能再进行入队操作,队列空时不能进行出队操作。

4. 第四题要求实现一个栈的括号匹配算法。

括号匹配是一种常见的应用场景,例如编程语言中的括号匹配。

要实现这个算法,可以使用栈来辅助。

遍历字符串中的每个字符,如果是左括号,则将其压入栈中;如果是右括号,则将栈顶元素取出并判断是否与右括号匹配。

如果匹配,则继续遍历下一个字符;如果不匹配,则说明括号不匹配,返回错误。

最后,如果栈为空,则说明括号匹配成功;如果栈不为空,则说明括号不匹配,返回错误。

5. 第五题要求使用栈实现一个逆波兰表达式的计算器。

CH3习题参考答案

CH3习题参考答案

CH3习题参考答案习题3解答判断题1.栈和队列都是限制存取点的线性结构(TRUE)2.栈和队列是两种重要的线性结构。

( TRUE )3.带头结点的单链表形式的队列,头指针F指向队列的头结点,尾指针R指向队列的最后一个结点(TRUE)4.在对不带头结点的链队列作出队操作时,不会改变头指针的值。

(FALSE)单项选择题:5.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,p n,若p1=n,则p i为( )。

A.i B.n=i C.n-i+1 D.不确定答:C[当p1=n,即n是最先出栈的,根据栈的原理,n必定是最后入栈的,那么输入顺序必定是1,2,3,…,n,则出栈的序列是n,…,3,2,1,所以答案是C。

] 6.栈和队列的共同点是( )。

A.都是先进后出B.都是先进先出C.只允许在端点处插入和删除元素D.没有共同点答:C7.若依次输入数据元素序列{a,b,c,d,e,f,g}进栈,出栈操作可以和入栈操作间隔进行,则下列哪个元素序列可以由出栈序列得到?( )A.{d,e,c,f,b,g,a} B.{ f,e,g,d,a,c,b}C.{e,f,d,g,b,c,a} D.{ c,d,b,e,g,a,f}答:A8.一个栈的入栈序列是1,2,3,4,5,则下列序列中不可能的出栈序列是( )A. 2,3,4,1,5B. 5,4,1,3,2C. 2,3,1,4,5D. 1,5,4,3,2答:B9. 队列操作的原则是( )A. 先进先出B. 后进先出C. 只能进行插入D. 只能进行删除答:A10. 栈的插入与删除是在( )进行。

A.栈顶B. 栈底C. 任意位置D. 指定位置答:A11.假设顺序栈的定义为:typedef struct {selemtype *base; /* 栈底指针*/selemtype *top; /* 栈顶指针*/int stacksize; /* 当前已分配的存储空间,以元素为单位*/ }sqstack;变量st为sqstack型,则栈st为空的判断条件为()。

数据结构(c语言版)第三版习题解答

数据结构(c语言版)第三版习题解答

void verge(seqlist *L)
{int t,i,j; i=0; j=L->length-1; while (i<j) { t=L->data[i]; L->data[i++]=L->data[j]; L->data[j--]=t; }
}
2.5已知一个顺序表中的各结点值是从小到大有序的,设计一个算法,插入一个值为x的结点,
3
第2章 线性表及其顺序存储
2.1 选择题 (1)表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,
插入一个元素所需移动元素的平均个数为( E ),删除一个元素所需移动元素的平均个数 为( A )。
A.(n− 1)/2 B.n C.n+1 D.n− 1 E.n/2 F.(n+1)/2 G.(n− 2)/2 (2)设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次通过栈S, 一个元素出栈后即进入队列Q,若6个元素出队的序列为e2、e4、e3、e6、e5和e1,则栈S 的容量至少应该为( C )。 A.6 B.4 C.3 D.2 (3)设栈的输入序列为1、2、3… n,若输出序列的第一个元素为n,则第i个输出的元素为 ( B )。
表1-1常用的渐进函数 函数 名称
1 常数 logn 对数
n 线性 nlogn n个logn
n2 平方 n3 立方 2n 指数 n! 阶乘 1.9 算法的空间复杂度指的是什么?如何表示? 【答】:算法的空间复杂度是指算法在执行过程中占用的额外的辅助空间的个数。可以将它表 示为问题规模的函数,并通过大写O符号表示空间复杂度。 1.10 对于下面的程序段,分析带下划线的语句的执行次数,并给出它们的时间复杂度T(n)。 (1) i++; (2) for(i=0;i<n;i++) if (a[i]<x) x=a[i]; (3)for(i=0;i<n;i++) for(j=0;j<n;j++) printf(“%d”,i+j); (4)for (i=1;i<=n-1;i++) { k=i; for(j=i+1;j<=n;j++) if(a[j]>a[j+1]) k=j; t=a[k]; a[k]=a[i]; a[i]=t; } (5)for(i=0;i<n;i++) for(j=0;j<n;j++) {++x;s=s+x;} 【答】:(1)O(1);(2)O(n);(3)O(n2);(4)O(n2);(5)O(n2)

数据结构c语言版第三版习题解答

数据结构c语言版第三版习题解答

数据结构c语言版第三版习题解答数据结构 C 语言版第三版习题解答在学习计算机科学与技术的过程中,数据结构是一门非常重要的基础课程。

而《数据结构C 语言版第三版》更是众多教材中的经典之作。

其中的习题对于我们理解和掌握数据结构的概念、原理以及算法实现起着至关重要的作用。

接下来,我将为大家详细解答这本书中的一些典型习题。

首先,让我们来看一道关于线性表的习题。

题目是这样的:设计一个算法,从一个有序的线性表中删除所有其值重复的元素,使表中所有元素的值均不同。

对于这道题,我们可以采用双指针的方法来解决。

定义两个指针 p和 q,p 指向线性表的开头,q 从 p 的下一个位置开始。

当 q 所指向的元素与 p 所指向的元素相同时,我们就将 q 所指向的元素删除,并将 q 向后移动一位。

当 q 所指向的元素与 p 所指向的元素不同时,我们将 p 向后移动一位,并将 q 所指向的元素赋值给 p 所指向的位置,然后再将 q 向后移动一位。

当 q 超出线性表的范围时,算法结束。

下面是用 C 语言实现的代码:```cvoid removeDuplicates(int arr, int n) {int p = 0, q = 1;while (q < n) {if (arrp == arrq) {for (int i = q; i < n 1; i++){arri = arri + 1;}(n);} else {p++;arrp = arrq;}q++;}}```再来看一道关于栈的习题。

题目是:利用栈实现将一个十进制数转换为八进制数。

我们知道,将十进制数转换为八进制数可以通过不断除以 8 取余数的方法来实现。

而栈的特点是后进先出,正好适合存储这些余数。

以下是 C 语言实现的代码:```cinclude <stdioh>include <stdlibh>define MAX_SIZE 100typedef struct {int top;int dataMAX_SIZE;} Stack;//初始化栈void initStack(Stack s) {s>top =-1;}//判断栈是否为空int isEmpty(Stack s) {return s>top ==-1;}//判断栈是否已满int isFull(Stack s) {return s>top == MAX_SIZE 1;}//入栈操作void push(Stack s, int element) {if (isFull(s)){printf("Stack Overflow!\n");return;}s>data++s>top = element;}//出栈操作int pop(Stack s) {if (isEmpty(s)){printf("Stack Underflow!\n");return -1;}return s>datas>top;}//将十进制转换为八进制void decimalToOctal(int decimal) {Stack s;initStack(&s);while (decimal!= 0) {push(&s, decimal % 8);decimal /= 8;}while (!isEmpty(&s)){printf("%d", pop(&s));}printf("\n");}int main(){int decimal;printf("请输入一个十进制数: ");scanf("%d",&decimal);printf("转换后的八进制数为: ");decimalToOctal(decimal);return 0;}```接下来是一道关于队列的习题。

数据结构习题(包含全部答案解析)

数据结构习题(包含全部答案解析)

数据结构习题集(自编)第一章绪论一、选择题1.数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间的()和运算的学科。

A.结构B.关系 C.运算 D.算法2.在数据结构中,从逻辑上可以把数据结构分成()。

A.动态结构和静态结构 B.紧凑结构和非紧凑结构C.线性结构和非线性结构 D.逻辑结构和存储结构3.线性表的逻辑顺序和存储顺序总是一致的,这种说法()。

A.正确B.不正确 C.无法确定 D.以上答案都不对4.算法分析的目的是()。

A.找出算法的合理性 B.研究算法的输人与输出关系C.分析算法的有效性以求改进 D.分析算法的易懂性5. 算法的时间复杂度取决于()A.问题的规模B待处理数据的初态 C. A和B6.一个算法应该是()。

A.程序B.问题求解步骤的描述C.要满足五个基本特性 D.A和C.7. 下面关于算法说法错误的是()A.算法最终必须由计算机程序实现B.为解决某问题的算法与为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性D. 以上几个都是错误的8.以下与数据的存储结构无关的术语是()。

A.循环队列 B. 链表 C. 哈希表 D. 栈9.在下面的程序段中,对x的赋值语句的频度为()for(i=0;i<n;i++)for(j=0;j<n;j++)x=x+1;nA. 2n B.n C.n2 D.log210.以下数据结构中,()是非线性数据结构A.树 B.字符串 C.队列 D.栈11. 下列数据中,()是线性数据结构。

A.哈夫曼树 B.有向无环图 C. 二叉排序树 D. 栈12.以下属于逻辑结构的是()。

A.顺序表 B. 哈希表 C.有序表 D. 单链表二、填空题1、_______是信息的载体,是对客观事物的符号表示,它能够被计算机识别、存储、加工和处理,________是对能够有效的输人到计算机中并且能够被计算机处理的符号的总称。

(数据、数据)2、数据元素是数据的______,有些情况下也称为元素、结点、顶点、记录等。

数据结构各章习题及答案

数据结构各章习题及答案

数据结构各章习题及答案第一章绪论一、选择题1.组成数据的基本单位是()(A)数据项(B)数据类型(C)数据元素(D)数据变量2.数据结构是研究数据的()以及它们之间的相互关系。

(A)理想结构,物理结构(B)理想结构,抽象结构(C)物理结构,逻辑结构(D)抽象结构,逻辑结构3.在数据结构中,从逻辑上可以把数据结构分成()(A)动态结构和静态结构(B)紧凑结构和非紧凑结构(C)线性结构和非线性结构(D)内部结构和外部结构4.数据结构是一门研究非数值计算的程序设计问题中计算机的(①)以及它们之间的(②)和运算等的学科。

①(A)数据元素(B)计算方法(C)逻辑存储(D)数据映像②(A)结构(B)关系(C)运算(D)算法5.算法分析的目的是()。

(A)找出数据结构的合理性(B)研究算法中的输入和输出的关系(C)分析算法的效率以求改进(D)分析算法的易懂性和文档性6.计算机算法指的是(①),它必须具备输入、输出和(②)等5个特性。

① (A)计算方法(B)排序方法(C)解决问题的有限运算序列(D)调度方法②(A)可执行性、可移植性和可扩充性(B)可行性、确定性和有穷性(C)确定性、有穷性和稳定性(D)易读性、稳定性和安全性二、判断题1.数据的机内表示称为数据的存储结构。

()2.算法就是程序。

()3.数据元素是数据的最小单位。

()4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。

()5.算法的时间复杂度取决于问题的规模和待处理数据的初态。

()三、填空题1.数据逻辑结构包括________、________、_________ 和_________四种类型,其中树形结构和图形结构合称为_____。

2.在线性结构中,第一个结点____前驱结点,其余每个结点有且只有______个前驱结点;最后一个结点______后续结点,其余每个结点有且只有_______个后续结点。

3.在树形结构中,树根结点没有_______结点,其余每个结点有且只有_______个前驱结点;叶子结点没有________结点,其余每个结点的后续结点可以_________。

数据结构Ch3习题答案

数据结构Ch3习题答案

Ch3栈和队列一.选择和填空:1.一个栈的入栈序列是a,b,c,d,e,则栈的可能的出栈序列是( D )。

A.edcab B.decab C.dceab D.abcde2.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为(n-i+1)。

3.栈结构通常采用的两种存储结构是(顺序存储结构和链式存储结构)。

4.判定一个顺序栈S为空的条件是(最多元素为m)(S.top=0或S.top=S.base)。

5.判定一个顺序栈S为满的条件是(最多元素为m)(S.top=m或S.top-S.base=m)。

6.栈的特点是(先进后出),队列的特点是(先进先出)。

7.一个队列的入对序列是a,b,c,d,e,则出队序列是(a,b,c,d,e)。

8.判定一个顺序队列Q(最多元素为m)为空的条件是(Q.front=Q.rear=0,…,m)。

9.判定一个顺序队列Q(最多元素为m)为满的条件是(Q.rear-Q.front=m或Q.rear=m,Q.front=0)。

10.判定一个循环队列Q(最多元素为m)为空的条件是(Q.front=Q.rear=0,…m-1)。

11.判定一个循环队列Q(最多元素为m)为满的条件是(Q.front=(Q.rear+1)%m)。

12.循环队列用数组Q[0,m-1]存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是((Q.rear-Q.front+m)%m)。

13.栈和队列的共同点是(是限定性的线性结构,只能在端点处进行插入删除操作)。

14.线性表、栈和队列都是(线性)结构,可以在线性表的(任何)位置插入和删除元素,对于栈,只能在(栈顶)位置插入和删除元素,对于队列只能在(队尾)插入元素和在(队头)删除元素。

15.向栈中压入元素的操作是(先压入元素,后移动指针或*S.top++=e)。

16.从栈中弹出元素的操作是(先移动指针,后弹出元素或e= - -*S.top)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构ch3
一、单项选择(10分)
(1)若进栈序列为3,5,7,9 ;不可能的出栈次序为_______。

(2006)
A 7 5 3 9
B 9 7 5 3
C 7 5 9 3
D 9 5 7 3
(2)Push和Pop命令常用于_______ 操作。

(程序员2005)
A 队列
B 数组
C 栈
D 记录
(3) 有3个元素a、b、c依次进入一个栈中,不可能的出栈次序为_______。

A cba
B cab
C bac
D abc
(4)(程序员2004)在程序的执行过程中,有实现函数的递归调用应该借助_______。

A 队列
B 线性表
C 栈
D 树
(5) 设有一个顺序栈初始状态为空,数据a、b、c、d依次进栈,如果出栈次序为b、d、c、a,则栈的容量至少为_______。

A 4
B 3
C 2
D 1
(6)(程序员2004)某线性表最常用的运算是插入和删除,插入运算是指在表尾插入一个新元素,删除运算是指删除表头第一个元素,那么采用_______存储方式最节省运算时间。

A、仅有尾指针的单向循环链表
B、仅有头指针的单向循环链表
C、单向链表
D、双向链表
(7)(程序员2004)判断“链式队列为空”的条件是_______。

A、front == NULL
B、real == NULL
C、front == rear
D、front != rear
(8)(NCRE200509)下列关于栈的描述正确的是_______。

A、在栈中只能插入元素而不能删除元素
B、在栈中只能删除元素而不能插入元素
C、栈是特殊的线性表,只能在一端插入或删除元素
D、栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素
(9)(NCRE200504)下列关于栈的描述中错误的是_______。

A、栈是先进后出的线性表
B、栈只能顺序存储
C、栈具有记忆作用
D、对栈的插入与删除操作中,不需要改变栈底指针
(10)(2008)循环队列存储在数组A[0 ……m]中,则入队时的操作为()
A、rear=rear+1
B、rear=(rear+1) mod (m-1)
C、rear=(rear+1) mod m
D、rear=(rear+1) mod (m+1)
二、填空(10分)
1、为了增加内存的利用率,可以让两个顺序栈共享一块连续的内存空间,应将两个栈
的______分别设置在这片空间的两端。

当______时候才会出现栈满。

2、顺序队列的队首指针和队尾指针为f和r,则判断队空的条件为______。

(2006)
3、队列元素的入队和出队应遵循______原则。

三、判断题(5分)
a)队列允许插入的一端称为队尾,队列允许删除的一端称为队头。

(2006)
b)
四、综合应用(3×5=15)
1、什么是队列的“假溢出”?请列举出任意3种解决方法。

2、有5个元素A、B、C、D、E依次入栈,要求C第一个出栈、D第二个出栈,
写出所有可能的出栈次序。

五、算法(10分)
1、用仅有尾指针的单向循环链表表示队列,写出入队、出队算法。

相关文档
最新文档