软件技术基础 02线性结构
软件技术基础《数据结构》习题

软件技术基础《数据结构》习题练习题及答案一选择题1. 设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队的顺序是e2、e4、e3、e6、e5、e1,则栈S的容量至少应是()。
3A.2 B.3 C.4 D.62. 在下面关于线性表的叙述中,选出错误的一项()。
2A.采用顺序存储的线性表,必须占用一片连续的存储单元B.采用顺序存储的线性表,便于进行插入和删除操作C.采用链接存储的线性表,不必占用一片连续的存储单元D.采用链接存储的线性表,便于进行插入和删除操作3. 设在栈中,由顶向下已存放元素c、b、a,在第4个元素d入栈前,栈中元素可以出栈,访问d入栈后,不可能的出栈序列是()。
3A.d c b a B.c b d a C.c a d b D.c d b a4. 栈是一种(),是软件中常用的数据结构。
3A.逻辑特殊的线性结构B.容量受限的线性结构C.运算操作限制在同一端进行的线性结构D.按随机存取方式运算的线性结构5. 下列描述线性表的叙述中错误的是()。
2A.线性表的顺序存储的元素是从小到大顺序排列的B.线性表的链接存储,便于插入、删除操作C.除第一个元素和最后一个元素外,其余每个元素有且仅有一个直接前驱和直接后继D.线性表可以为空6. 除个别结点外,其余结点只能有1个前驱结点,可有任意多个后继结点,这样的结构为()。
6A.线性结构B.树形结构C.图形结构D.拓扑结构7. 在一个链队中,假定front和rear分别为队首指针和队尾指针,则删除一个结点的操作为()。
3A.rear=front->next; B.rear=rear->next;C.front=front->next; D.front=rear->next;8. 用链表表示线性表的优点是()。
2A.便于随机存取B.花费的存储空间较顺序存储少C.便于插入和删除操作D.数据元素的物理顺序与逻辑顺序相同9. 若某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用()存储方式最节省运算时间。
计算机二级软件技术基础试题及答案

二级等级考试软件技术基础试题及答案一、选择填空题:1.栈和队列是两种特殊的线性表,栈的特点是(D ),队列的特点是(C),二者的共同特点是只能在它们的(A)处添加和删除结点。
A.端点B.中间点 C.先进先出D.后进先出2.线性表结构的查找方法有顺序查找法,二分查找法等。
顺序查找法适用于查找(A或B)或(B或A)的线性表,二分查找法只适用于查找顺序存储的( C )的线性表。
A.顺序存储B.链接存储 C.索引存储D.已排序E.未排序3.下图所示的二叉树中的分支结点有(A);按前序法遍历该二叉树得到的结点序列是(C);按中序遍历该二叉树得到的结点序列是(B);按后序法遍历得到的结点序列是(D)。
AB DC EI H FJ GA.A、B、C、D、E、F B.BICAHEJFGDC.ABCIDEHFJG D.ICBHJGFEDA4.在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶结点都在同一层上,这样的二叉树称为( C );如果一棵二叉树至多只有最下面的两层上的结点度数可以小于2,并且最下一层上的结点都集中在该层最左边的若干位置上,此二叉树称为(A);二叉排序树左子树上所有结点的关键字均( D )根结点的关键字;右子树上所有结点的关键字均(G )根结点的关键字。
A.完全二叉树B.非完全二叉树 C.满二叉树D.小于E.大于F.小于等于G.大于等于5.(B )查找要求查找表中的数据是有序的,而(A)查找不要求查找表中的数据是有序的。
( C )排序是顺序地把待排序列中的各个元素按其排序码的大小,插入到已排序的适当位置上;( E )排序是不断从待排序的序列中选取排序码最小的数据元素放到已排序的元素列的后面,直到序列中所有记录都已排序为止;( F )排序是每次对相邻两个元素的排序码进行比较,当不符合次序即交换位置,直到所有相邻两元素的次序合理为止。
A.顺序B.二分C.简单插入D.快速E.简单选择F.冒泡 G.归并6.SA法的SD法是软件开发过程常用的方法,人们使用SA法可以得到( D ),这种方法采用的基本手段同(A);使用SD法时可以得到(C ),并可实现( B )。
软件技术知识基础-数据结构

栈
总结词
栈是一种后进先出(LIFO)的数据结构。
VS
详细描述
栈只允许在末尾进行插入和删除操作,通 常用于实现函数调用、括号匹配等功能。 栈的优点是插入和删除速度快,缺点是空 间利用率较低。
队列
总结词
队列是一种先进先出(FIFO)的数据结构。
详细描述
队列允许在一端进行插入操作,在另一端进 行删除操作,通常用于实现任务调度、缓冲 区处理等功能。队列的优点是空间利用率高, 缺点是插入和删除速度较慢。
软件技术知识基础-数 据结构
目 录
• 数据结构概述 • 线性数据结构 • 非线性数据结构 • 排序与查找 • 数据结构的应用
01
数据结构概述
数据结构的定义
数据结构:数据结构是计算机中组织数据的方式,它定义了数据元素之间的逻辑关系。数据结构是计算机存储、组织数据的 方式,它涉及到数据的逻辑结构、物理结构以及数据元素之间的关系。
感谢您的观看
04
排序与查找
排序算法
冒泡排序
通过重复地遍历待排序序列,比较相邻元素的大 小,交换位置,使得较大的元素逐渐往后移动, 最终达到排序的目的。
插入排序
将待排序元素插入到已排序序列中的适当位置, 使得插入后仍然保持有序,直到所有元素均插入 完毕。
选择排序
每次从未排序的元素中选取最小(或最大)的一 个元素,将其放在已排序序列的末尾,直到所有 元素均排序完毕。
快速排序
采用分治策略,通过一趟排序将待排序序列分割 成独立的两部分,其中一部分的所有元素均比另 一部分的元素要小,然后再按此方法对这两部分 继续进行排序,以达到整个序列有序。
查找算法
线性查找
二分查找
哈希查找
第三章 计算机软件(详细知识点总结)

第三章计算机软件一、计算机系统基本组成:硬件和软件(一)计算机软件:能指挥计算机完成特定任务的、以电子格式存储的程序、数据和相关文档。
(二)软件的功能都在硬件的支撑下实现,用硬件实现的功能可能由软件来部分实现。
二、软件(一)定义(ISO):包含与数据处理系统操作有关的程序、规程、规则以及相关文档的智力创作。
(二)组成:程序+(与程序相关的)数据和文档。
1.文档:程序开发、维护和使用所涉及的资料,如设计报告、维护手册和用户使用指南等2.程序是软件的主体,单独的数据和文档一般不认为是软件。
(三)特性:1.依附性:通常必须使用物理载体进行存储,依附于一定的硬件和软件环境运行2.不可见性:以二进位表示、无形的产品3.脆弱性:容易受到病毒入侵4.易复制性5.无磨损性(四)软件版权:1.定义:软件的作者享有拷贝、发布、修改等权利,用户购买软件只有使用权2.软件盗版:未获得版权所有者许可就复制和散发商品软件的行为3.相关法律法规:知识产权保护法、著作权法、专利法、计算机软件保护条例……(五)软件分类:1.按应用角度分:系统软件和应用软件1)系统软件:A.定义:管理系统资源、提供常用基本操作的软件B.特点:交互性(与计算机硬件系统)、通用性C.组成:a)基本输入/输出系统(BIOS)——最接近计算机硬件的系统软件b)操作系统i.DOS、Windows 95、Windows 98、WindowsMe、Windows NT 4.0、Windows 2000、WindowsXP、Windows 2003、Windows Vista、Windows 7ii.Unix:BSD、SRV4、SCO UNIX、AIX、Solaris、HP-UXiii.Linux:Red Hat、SuSE等c)程序设计语言处理系统(编译器):FORTRAN、BASIC、Visual Basic、Java、C、C++、LISP、PROLOG、MATLAB、ALGOL、PASCAL等d)数据库管理系统(DBMS):FoxPro、Microsoft Access、VFP、SQL Server、Oracle、DB2、SYBASE等e)实用程序:磁盘清理程序、磁盘碎片整理程序、杀毒软件、防火墙等2) 应用软件:A. 定义:为用户完成某项特定任务的软件B. 按应用软件的开发方式和适用范围,可分为:通用应用软件、定制应用软件a) 通用应用软件: b) 定制应用软件: i. 定义:按照不同领域用户的特定应用要求而专门设计开发的软件 ii. 举例:超市销售管理和市场预测系统、工厂的集成制造系统、大学教务管理系统、医院门诊挂号系统、酒店客房管理系统、民航售票系统3) 系统软件和应用软件的关系:应用软件以系统软件为基础(如:Powerpoint 以windows 为基础;Powerpoint 调用windows 的功能)2. 按软件权益如何处置分为:商品软件、共享软件、自由软件1) 软件许可证(License):允许用户购买一份软件而同时安装在约定的若干台计算机上使用 2) 自由软件A. 代表:TCP/IP 、LinuxB. 允许用户随便拷贝、修改其源代码和销售(六) 软件发展的历史:1. 第一阶段:个体工作方式2. 第二阶段:合作方式1) 标志:软件危机2) 软件危机产生原因:软件复杂程度提高、研制周期变长、正确性难以保证、可靠性问题突出(并非硬件软件不协调发展)3. 第三阶段:软件工程(用工程化的方法组织软件的开发)三、操作系统(一) 地位:计算机运行配置必不可少的底层系统软件 (二) 作用:1. 管理分配系统中的各种软硬件资源2. 为用户提供友善的人机界面1) 命令行界面2) 图形用户界面:采用图标(icon )来形象地表示系统中的文件、程序和设备等对象3. 为应用程序的开发和运行提供一个高效率的平台(开发和运行应用程序与运行的操作系统密切相关) 1) 裸机:只有硬件、没有软件的计算机。
《软件技术基础》实验指导

说明每个实验题目含有一个main函数和一些函数, 与实验题目相关的基本运算的函数定义和main函数定义的代码在附录以及对应的文件夹中给出, 供上机实验参考使用。
对于每个题目, 只需要根据题目要求设计算法, 补充函数定义, 然后对程序进行编译、调试。
实验一线性表一、实验目的1.熟悉线性表的顺序和链式存储结构2.掌握线性表的基本运算3.能够利用线性表的基本运算完成线性表应用的运算二、实验内容设有一个线性表E={e1, e2, …, en-1, en}, 设计一个算法, 将线性表逆置, 即使元素排列次序颠倒过来, 成为逆线性表E’={ en , en-1 , …, e2 , e1 }, 要求逆线性表占用原线性表空间, 并且用顺序表和单链表两种方法表示, 分别用两个程序来完成。
(文件夹: 顺序表逆置、单链表逆置)已知由不具有头结点的单链表表示的线性表中, 含有三类字符的数据元素(字母、数字和其他字符), 试编写算法构造三个以循环链表表示的线性表, 使每个表中只含有同一类的字符, 且利用原表中的结点空间, 头结点可另辟空间。
(文件夹: 分解单链表)实验二栈和队列一、实验目的1.熟悉栈和队列的顺序和链式存储结构2.掌握栈和队列的基本运算3.能够利用栈和队列的基本运算完成栈和队列应用的运算二、实验内容1.设单链表中存放有n个字符, 试编写算法, 判断该字符串是否有中心对称的关系, 例如xyzzyx是中心对称的字符串。
(提示: 将单链表中的一半字符先依次进栈, 然后依次出栈与单链表中的另一半字符进行比较。
)(文件夹: 判字符串中心对称)假设以数组sequ[m]存放循环队列的元素, 同时设变量rear和quelen 分别指示循环队列中队空的条件:sq->quelen==0;队满的条件:sq->quelen==m。
(文件夹:循环队列)实验三串一、实验目的1.熟悉串的顺序存储结构2.掌握串的基本运算及应用二、实验内容1. 串采用顺序存储结构, 编写朴素模式匹配算法, 查找在串中是否存在给定的子串。
《计算机软件技术基础》试题及答案

计算机软件技术基础试题1.线性表的链式存储结构与顺序存储结构相比优点是 CD ; A. 所有的操作算法实现简单 B. 便于随机存取 C. 便于插入和删除D. 便于利用零散的存储器空间 2.线性表是具有n 个 C 的有限序列;A. 表元素B. 字符C. 数据元素D. 数据项E. 信息项3.若长度为n 的线性表采用顺序存储结构,在其第I 个位置插入一个新元素的算法的时间复杂度为 C ;1≤I ≤n+1 A. O0 B. O1 C. OnD. On 24.设A 是一个线性表a 1,a 2,…,a n ,采用顺序存储结构,则在等概率的前提下,平均每插入一个元素需要移动的元素个数为 B ,平均每删除一个元素需要移动的元素个数为 A ;若元素插在a i 与a i+1之间0≤I ≤n-1的概率为)1()(2+-n n i n ,则平均每插入一个元素所要移动的元素个数为 C ;A. 21-n B. 2n C. 312+nD. 413+n5.下列函数中,按它们在∞→n 时的无穷大阶数,最大的是 D ;A. log nB. nlog nC. 2n/2D. n6.A. s->next=p+1; p->next=s;B. p.next=s; s.next=p.next;C. s->next=p->next; p->next=s->next;D. s->next=p->next; p->next=s;7.将两个各有n 个元素的有序表归并为一个有序表时,其最少的比较次数是 A ; A. nB. 2n-1C. n-1D. 2n8.下面的程序段是合并两个无头结点链表ha和 hb为一个无头结点链表ha的过程,作为参数的两个链表都是按结点的data域由大到小链接的;合并后新链表的结点仍按此方式链接;请填写下述空框,使程序能正确运行;define NULL 0typedef struct node{int data;struct node next;}node, linklisttype;void combinelinklisttype ha, linklisttype hb{linklisttype h, p;h = linklisttype mallocsizeoflinklisttype;h->next = NULL;p = h;whileha = NULL && hb = NULLifha->data>=hb->data{ /较大的元素先插入/p->next = 1 ;p = 2 ;3 ;}else{p->next = 4 ;p = 5 ;6 ;}ifha==NULL 7 ;ifhb==NULL 8 ;ha = h->next;freeh;}参考答案: 1 ha 2 p->next 3 ha=ha->next4 hb5 p->next6 hb=hb->next7 p->next=hb 8 p->next=ha9.如果表A中所有元素a1,a2,…,a n与表B的一个顺序子表b k,b k+1,…b k+n-1完全相同即a1=b k,a2=b k+1,…a n=b k+n-1,则称表A包含在表B中;设ha,hb为带头结点的单链表,分别表示有序表A和B,下面的函数用于判别表A 是否包含在表B中,若是,则返回true,否则返回false;提示:用递归实现define true 1define false 0define NULL 0typedef struct node{int data;struct node next;}node, linklisttype;int inclusionlinklisttype ha, linklisttype hb{linklisttype pa, pb;pa = ha->next;pb = hb->next;1 ;while 2ifpa->data=pb->data 3 ;else 4 ;5 ;}参考答案:1 ifpa==NULL returntrue2 pb=NULL && pa->data>=pb->data3 returninclusionpa, pb4 pb = pb->next;5 returnfalse10.在本题的程序中,函数create_link_listn建立一个具有n个结点的循环链表;函数josephusn,I,m 对由create_link_listn所建立的具有n个结点的循环链表按一定的次序逐个输出,并删除链表中的所有结点;参数nn>0指明循环链表的结点个数,参数I1≤I≤n指明起始结点,参数mm>0是步长,指明从起始结点或前次被删除并输出的结点之后的第m个结点作为本次被输出并删除的结点;例如,对于下图所示的具有6个结点的循环链表,在调用josephus6,3,2后,将输出5,1,3,6,4,2;请在空框处填上适当内容,每框只填一个语句;define NULL 0typedef struct node{int data;struct node next;}node, linklisttype;linklisttype create_link_listint n{linklisttype head, p, q;int I;head = NULL;ifn>0{head = linklisttype mallocsizeoflinklisttype;p = head;forI=1;I<=n-1;I++{ /此循环用于建立一个链表,链表的内容从1至n-1/p->data = I;q = linklisttype mallocsizeoflinklistttype;1 ;2 ;}p->data = n;3 ; /建立从尾链到首的环形结构/}returnhead;}void Josephusint n, int j, int m{linklisttype p, q;int j;p = create_link_listn;for;I>1;I-- p = p->next;4 ;whilej<n{forI=1;I<=m-1;I++ p = p->next;5 ;printf“%8d”,q->data;6 ;freeq;j=j+1;}}参考答案:1 p->next = q;2 p = q;3 p->next = head4 j=05 q=p->next;6 p->next = q->next11.在下列程序中,函数differenceA,B用于求两集合之差C=A-B,即当且仅当e是A中的一个元素,且不是B中的元素时,e是C中的一个元素;集合用有序链表实现,用一个空链表表示一个空集合,表示非空集合的链表根据元素之值按递增排列,执行C=A-B之后,表示集合A和B的链表不变,若结果集合C非空,则表示它的链表应根据元素之值按递增序排列;函数append用于在链表中添加结点;include <stdio.h>define NULL 0typedef struct node{int data;struct node next;}NODE;NODE appendNODE last, int x{last->next=NODE mallocsizeofNODE;last->next->data=x;returnlast->next;}NODE differenceNODE A ,NODE B{NODE C,last;C=last=NODE mallocsizeofNODE;while 1ifA->data < B->data{last=appendlast,A->data;A=A->next;}elseif 2 {A=A->next;B=B->next;}else3 ;while 4 {last=appendlast,A->data;A=A->next;}5 ;last=C;C=C->next;freelast;returnC;}参考答案:1 A=NULL & B=NULL2 A->data==B->data3 B=B->next;4 A=NULL5 last->next=NULL;12.阅读以下算法,填充空格,使其成为完整的算法;其功能是在一个非递减的顺序存储线性表中从下标1处开始存储,删除所有值相等的多余元素;define MAXSIZE 30typedef struct{int elemMAXSIZE;int length;/表长/}sqlisttype;void exam21sqlisttype L{int I,j;I=2,j=1;while 1 {ifL->elemI<>L->elemj{2 ;3 ;}I++;}4 ;}参考答案:1 i<=L->length23 j++;413.用单链表表示的链式队列的队头在链表的 A 位置;A. 链头B. 链尾C. 链中14.若用单链表表示队列,则应该选用 B ;A. 带尾指针的非循环链表B. 带尾指针的循环链表C. 带头指针的非循环链表D. 带头指针的循环链表15.在解决计算机主机与打印机之间速度不匹配问题时,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则从该缓冲区中取出数据打印,先放入打印缓冲区的数据先被打印;该缓冲区应该是一个 B 结构;A. 堆栈B. 队列C. 数组D. 线性表16.若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3;当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为 B ;A. 1和5B. 2和4C. 4和2D. 5和117.设栈的输入序列为1,2,…,10,输出序列为a1,a2,…,a10,若a5=10,则a7为 C ;A. 4B. 8C.不确定D.718.设栈的输入序列是1,2,3,4,则 D 不可能是其出栈序列;A. 1243 B. 2134 C. 1432 D. 431219.以下 D 是C语言中”abcd321ABCD”的子串;A. abcdB. 321ABC. “abcABC”D. “21AB”20.若串S=”software”,其子串的数目是 C ;A. 8B. 37C. 36D. 921.将一个A1:100,1:100的三对角矩阵,按行优先存入一维数组B1:298中,A中元素A66,65即该元素的下标在B数组中位置k为 B ;A. 198B. 195C. 197D. 19622.设高为h的二叉树只有度为0和2的结点,则此类二叉树的结点数至少为 B ,至多为F ;高为h的完全二叉树的结点数至少为 E ,至多为 F ;A. 2h B. 2h-1 C. 2h+1 D.h+1E. 2h-1F. 2h-1G. 2h+1-1H. 2h+123.一棵有124个叶结点的完全二叉树,最多有 B 个结点;A. 247B. 248C. 249D. 25124.若从二叉树的任一结点出发到根的路径上所经过的结点序列按其关键字有序,则该二叉树是C ;A. 满二叉树B. 哈夫曼树C. 堆D. 二叉查找树25.前序遍历和中序遍历结果相同的二叉树为 F ;前序遍历和后序遍历结果相同的二叉树为B ;A. 一般二叉树B. 只有根结点的二叉树C. 根结点无左孩子的二叉树D. 根结点无右孩子的二叉树E. 所有结点只有左孩子的二叉树F. 所有结点只有右孩子的二叉树26.具有n 个结点的完全二叉树,已经顺序存储在一维数组A1..n 中,下面的算法是将A 中顺序存储变为二叉链表存储的完全二叉树;请填写适当语句在下面的空格内,完成上述算法; define MAXSIZE 30 typedef struct btnode{ int data;struct btnode lchild, rchild;}BTN;void createtreeBTN p,int A, int I,int n{ 1 ; p->data=AI; if 2 3 ; elsep->lchild=NULL;if 4 createtree 5 ; elsep->rchild=NULL; }void btreeBTN p ,int A,int n{ createtreep,A,1,n; }参考答案:1 p=BTN mallocsizeofBTN2 2I<=n3 createtreep->lchild,A,2I,n4 2I+1<=n5 p->rchild,A,2I+1,n27.若在线性表中采用折半查找法查找元素,该线性表应该 C ; A. 元素按值有序B. 采用顺序存储结构C. 元素按值有序,且采用顺序存储结构D. 元素按值有序,且采用链式存储结构28.在分块检索中,对256个元素的线性表分成 16 块最好,每块的最佳长度是 16 ;若每块的长度为8,其平均检索长度为 21 ;29.假定有K 个关键字互为同义词,若用线性探测法把这K 个关键字存入散列表中,至少要进行 D 次探测; A. K-1次 B. K 次 C. K+1次D. KK+1/2次30.在n 个记录的有序顺序表中进行折半查找,最大的比较次数是⎣⎦1log 2+n ;31.Hash 技术广泛应用于查找过程,选择Hash 函数的标准是 和 ;处理冲突的技术有优有劣,其共同标准是 ;32.在下述排序算法中,所需辅助存储空间最多的是 B ,所需辅助存储空间最小的是 C ,平均速度最快的是 A ; A.快速排序B. 归并排序C. 堆排序33.在文件局部有序或文件长度较小的情况下,最佳内部排序的方法是 A ;A. 直接插入排序B. 冒泡排序C. 简单选择排序34.快速排序在最坏情况下时间复杂度是On2,比 A 的性能差;A. 堆排序B. 冒泡排序C. 简单选择排序35.若需在Onlogn的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是C ;A. 快速排序B. 堆排序C. 归并排序D. 希尔排序36.如果只想得到1000个元素组成的序列中第5个最小元素之前的部分排序的序列,用B 方法最快;A. 冒泡排序B. 快速排序C. 希尔排序D. 堆排序E. 简单选择排序37.以下结点序列是堆的为 A ;A. 100,90,80,60,85,75,20,25,10,70,65,50B. 100,70,50,20,90,75,60,25,10,85,65,8038.若要尽可能快地完成对实数数组的排序,且要求排序是稳定的,则应选 C ;A. 快速排序B. 堆排序C. 归并排序D. 希尔排序39.从未排序序列中依次取出一个元素与已排序序列中的元素依次进行比较,然后将其放在已排序序列的合适位置,该排序方法称为 A 排序法;A. 插入排序B. 交换排序C. 选择排序D. 归并排序40.直接插入排序在最好情况下的时间复杂度为 B ;A. OlognB. OnC. OnlognD. On241.下面函数是将任意序列调整为最大堆的算法,请将空白部分填上:将任意序列调整为最大堆通过不断调用adjust函数,即fori=n/2;i>0;i-- adjustlist, i, n;其中list为待调整序列所在数组从下标1开始,n为序列元素的个数;void adjustint list, int root, int n{/将以root为下标的对应元素作为待调整堆的根,待调整元素放在list数组中,最大元素下标为n/ int child,rootkey;rootkey = 1 ;child = 2root;whilechild < n{ifchild<n && listchild<listchild+12 ;ifrootkey > listchildbreak;else{list 3 =listchild;4 ;}}list 5 =rootkey;}参考答案:1 listroot2 child++;3 child/24 child = 2;5 child/241.表是一种数据结构,链表是一种 1 ;队列和栈都是线性表,栈的操作特性是 2 ,队列的操作特性是 3 ;今有一空栈S,对下列待进栈的数据元素序列a,b,c,d,e,f依次进栈、进栈、出栈、进栈、进栈、出栈的操作,则此操作完成后,栈S的栈顶元素为 4 ,栈底元素为5 ;供选答案:1: A. 非顺序存储线性表 B. 非顺序存储非线性表C. 顺序存储线性表D. 顺序存储非线性表2: A. 随机进出 B. 先进后出C. 先进先出D. 出优于进3: A. 随机进出 B. 先进后出C. 后进后出D. 进优于出4: A. f B. cC. aD. b5: A. b B. cC. aD. d答案:ABCBC42.操作系统主要是对计算机系统全部 1 进行管理,以方便用户、提高计算机使用效率的一种系统软件;它的主要功能有:处理机管理、存储管理、文件管理、 2 管理和设备管理等;Windows 和Unix是最常用的两类操作系统;前者是一个具有图形界面的窗口式的 3 系统软件,后者是一个基本上采用 4 语言编制而成的的系统软件;在 5 操作系统控制下,计算机能及时处理由过程控制反馈的信息并作出响应;供选答案:1: A. 应用软件 B. 系统软硬件C. 资源D. 设备2: A. 数据 B. 作业C. 中断D. I/O3: A. 分时 B. 多任务C. 多用户D. 实时4: A. PASCAL B. 宏C. 汇编D. C5: A. 网络 B. 分时C. 批处理D. 实时答案:CBBDD43.本程序从键盘读入整数,并按从大到小的顺序输出输入整数中互不相等的那些整数;程序一边读入整数,一边构造一个从大到小顺序链接的链表,直至不能从键盘读入整数,然后顺序输出链表上各表元的整数值;主函数每读入一个整数,就调用函数insert,函数insert将还未出现在链表上的整数按从大到小的顺序插入到链表中;为了插入方便,链表在表首有一个辅助表元;阅读下列C代码,在 n 处填入相应的字句以完成上述功能;include <stdio.h>include <malloc.h>define NULL 0typedef struct node{int val;struct node next;}NODE;void insertNODE list,int x{NODE u, v, p;u = list; v = u->next;while 1 && x < v->val{ /寻找插入位置/u=v;v=u->next;}ifv==NULL || 2 { /判断是否要插入表元/p = NODE mallocsizeofNODE;p->val = x; /生成新表元/3 = v;4 = p; /插入新表元/}}main{int x;NODE head, p;/首先建立只有辅助表元的空链表/head = NODE mallocsizeofNODE;5 =NULL;printf“Enter Integers:\n”;whilescanf“%d”,&x == 1 /反复读入整数插入链表/inserthead,x;forp=head->next;p=NULL;p=p->next /输出链表/printf“%d\t”,p->val;printf“\n”;}答案:1 v = NULL或v2 x > v->val 或 x = v->val3 p->next4 u->next5 head->next44.计算机数据处理的对象是具有不同结构的各种数据,可以访问的最小数据信息单位是1 ,可以引用的最小命名数据单位是2 ;线性表是最简单的一种数据结构,有顺序和链接两种存储方式;线性表按链接方式存储时,每个结点的包括 3 两部分;线性表的查找有 4 和 5 两种,但 5 只能用于顺序存储的情况; 供选答案:1: A. 数字 B. 字符C. 数据元素D. 数据项2: A. 结点 B. 记录C. 数据元素D. 数据项3: A. 数据值与符号 B. 数据与指针C. 数据与表名D. 头地址与尾地址4: A. 随机查找 B. 顺序查找C. 二分法查找D. 浏览5: A. 随机查找 B. 顺序查找C. 二分法查找D. 浏览答案:CDBBC45.本程序用于从链盘读入整数,插入到链表,或从链表删除一个整数;阅读下面的C代码,将应填入 n 处的字名写在答卷的对应栏内;include <stdio.h>include <malloc.h>typedef struct node{int val;struct node next;}NODE;NODE insNODE list, int x{ /将x按从小到大的次序插入链表/NODE u, v=list, p;for; v = NULL && x < v->val ; v = v->next;/寻找插入位置/ifv = NULL && x == v->val returnlist; /已有,被忽略/p = NODE mallocsizeofNODE;p->val=x; /生成新表元/ifv == list list = p;else 1 ;2 ;return list;}NODE delNODE list, int x{ /从链表中删除值为x的表元/NODE u, v;forv = list; v = NULL && x < v->valu; u=v;v=v->next;ifv = NULL && x == v->val{ /找到值为x的表元/ifv == list list = list->next;else 3 ;4 ; /释放空间/}else p rintf“没有找到\n”;returnlist;}main{int x,ans;NODE list=NULL, p;while1{printf“\n输入1:将整数插入到链表;\n输入2:从链表删除一个整数;\n”;printf“其它整数,结束程序;\n\t请输入选择”;scanf%d,&ans;if 5 return;printf“输入整数:”;scanf“%d”,&x;ifans==1 list=inslist,x;else list=dellist,x;forp=list;p=NULL;p=p->nextprintf“%4d”,p->val;}}答案:1 u->next = p;2 p->next = v3 u->next = v->next4 freev5 ans = 1 && ans = 246. 从未排序的序列中,依次取出元素,与已排序序列的元素比较后,放入已排序序列中的恰当位置上,这是 1 排序;从未排序的序列中,挑选出元素,放在已排序序列的某一端位置,这是 2 排序;逐次将待排序的序列中的相邻元素两两比较,凡是逆序则进行交换,这是 3 排序;如果整个排序过程都在内存中进行,称为4 排序;排序算法的复杂性与排序算法的5 有关;供选答案:1: A. 选择 B. 插入C. 比较D. 归并2: A. 选择 B. 插入C. 比较D. 归并3: A. 冒泡 B. 交换C. 比较D. 散列4: A. 外部 B. 内部C. 外存D. 内存5: A. 运算量大小与占用存储多少B. 运算量大小与处理的数据量大小C. 并行处理能力和占用存储多少D. 占用存储多少和处理的数据量大小答案:BAABA47.操作系统是对计算机资源进行的 1 系统软件,是 2 的接口;在处理机管理中,进程是一个重要的概念,它由程序块、 3 和数据块三部分组成,它有3种基本状态,不可能发生的状态转换是 4 ;虚拟存储器的作用是允许程序直接访问比内存更大的地址空间,它通常使用 5 作为它的一个主要组成部分;供选答案:1: A. 输入和输出 B. 键盘操作C. 管理和控制D. 汇编和执行2: A. 软件和硬件 B. 主机和外设C. 高级语言和机器语言D. 用户和计算机3: A. 进程控制块 B. 作业控制块C. 文件控制块D. 设备控制块4: A. 运行态转换为就绪态 B. 就绪态转换为运行态C. 运行态转换为等待态D. 等待态转换为运行态5: A. 软盘 B. 硬盘C. CDROMD. 寄存器答案:CDADB48. A 是信息的载体,它能够被计算机识别、存储和加工处理;A. 数据B. 数据元素C. 结点D. 数据项49.下列程序段的时间复杂度为 C ;fori=1;i<n;i++{y=y+1;forj=0;j<=2n;j++ x++;}供选答案:A. On-1B. O2nC. On2D. O2n+150.下面程序段的时间复杂度为 D ;i=1;whilei<=n i=i2;供选答案:A. O1B. OnC. On2D. Olog2n51.下面程序段的时间复杂度为 B ;a=0;b=1;fori=2;i<=n;i++{s=a+b;b=a;a=s;}供选答案:A. O1B. OnC. Olog2nD. On252.数据结构是一门研究非数值计算的程序设计问题中,计算机的 A 以及它们之间的关系和运算等的学科;A.操作对象B. 计算方法C. 逻辑存储D. 数据映象53.在数据结构中,从逻辑上可以把数据结构分成 C ;A. 动态结构和静态结构B. 紧凑结构和非紧凑结构C. 线性结构和非线性结构D. 内部结构和外部结构54.算法分析的目的是 C ;A. 找出数据结构的合理性B. 研究算法中输入和输出的关系C. 分析算法的效率以求改进D. 分析算法的易懂性和文档性55.算法分析的两个主要方面是 4 ;A. 间复杂性和时间复杂性B. 正确性和简明性C. 可读性和文档性D. 数据复杂性和程序复杂性56.一个线性顺序表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址为B ;A. 110B. 108C. 100D. 12057.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为P1,P2,P3,…,P n,若P1=n,则P i为 C ;A. iB. n-iC. n-i+1D.不确定58.对于一个栈,给出输入项A,B,C;如果输入项序列由A,B,C所组成,则不可能产生的输出序列是A ;A. CABB. CBAC. ABCD. ACB59.设有如下的单链表的按序号查找的算法,其时间复杂度为 B ;LinkNode GetNodeLinklist head, int i{int j;ListNode p;P = head; j=0;whilep->next && j<i{p = p->next;j++;}ifi==jreturnp;elsereturnNULL;}供选答案:A. On2B. O2nC. On3D. Ologn60.二维数组A mn按行序为主顺序存放在内存中,每个数组元素占1个存储单元,则元素a ij的地址计算公式是 C ;A. LOCa ij = LOCa11+i-1m+j-1B. LOCa ij = LOCa11+j-1m+i-1C. LOCa ij = LOCa11+i-1n+j-1D. LOCa ij = LOCa11+j-1n+i-161.以下哪一个不是队列的基本运算 C ;A. 从队尾插入一个新元素B. 从队列中删除第i个元素C. 判断一个队列是否为空D. 读取队头元素的值62.在一个长度为n的顺序表中,向第i个元素之前插入一个新元素,需向后移动 B 个元素;A. n-iB. n-i+1C. n-i-1D. i63.从一个长度为n的顺序表中删除第i个元素时,需向前移动 A 个元素;A. n-iB. n-i+1C. n-i-1D. i64.在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队首指针和队尾指针,则判断队空的条件是 B ;A. front=rear+1B. front=rearC. front+1=rearD. front=065.从一个具有n个结点的单链表中查找其值等于x的结点时,在查找成功的情况下,需平均比较 D 个结点;A. nB. n/2C. n-1/2D. n+1/266.一个栈的入栈序列是a,b,c,d,e,则栈不可能的输出序列是 C ;A. edcbaB. decbaC. dceabD. abcde67.栈结构通常采用的两种存储结构是 A ;A. 顺序存储结构和链表存储结构B. 散列方式和索引方式C. 链表存储结构和数组D. 线性存储结构和非线性存储结构68.判断一个顺序栈ST最多元素为mo为空的条件是 B ;A. ST->top<>0B. ST->top=0C. st->top<>moD. st->top==mo69.不带头结点的单链表head为空表的判定条件是 A ;A. head==NILLB. head->next==NULLC. head->next==headD. head = NULL70.在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在p和q之间插入s结点,则应执行C ;A. s->next = p->next; p->next=s;B. p->next = s->next; s->next=p;C. q->next = s; s->next=p;D. p->next = s; s->next=q;71.假设双向链表结点的类型如下:typedef struct Linknode{int data;struct Linknode lLink; /前驱结点指针/struct Linknode rLink; /后继结点指针/}下面给出的算法是要把一个q所指新结点,作为非空双向链表中的p所指的结点前驱结点插入到该双向链表中,能正确完成要求的算法段是 C ;A.q->rLink=p; q->lLink=p->lLink; p->lLink=q; p->lLink->rLink=q;B. p->lLink=q, q->rLink=p; p->lLink->rLink=q; q->lLink=p->lLink;C. q->lLink=p->lLink; q->rLink=p;p->lLink->rLink=q;p->lLink=q;D. 以上均不对72.串是一种特殊的线性表,其特殊性体现在 B ;A. 可以顺序存储B. 数据元素是一个字符C. 可以链接存储D. 数据元素可以是多个字符73.设有两个串p和q,求q在p中首次出现的位置的运算称作 B ;A. 连接B. 模式匹配C. 求子串D. 求串长74.设串s1=”ABCDEFG”,s2=”PQRST”,函数conx,y返回x和y串的连接串,subss,I,j返回串s的从序号i的字符开始的j个字符组成的子串,lens返回串s的长度,则consubs1,2,lens2,subs1,lens2,2的结果是 D ;A. BCDEFB. BCDEFGC. BCPQRSTD. BCDEFEF75.常对数组进行的两种基本操作是 C ;A. 建立和删除B. 索引和修改C. 查找和修改D. 索引和查找76.稀疏矩阵一般的压缩存储方法有两种,即C ;A. 二维数组和三维数组B. 三元组和散列C. 三元组和十字链表D. 散列和十字链表77.对下图所示的二叉表,按先根次序遍历得到的结点序列为 B ;A. ABCDHEIFGB. ABDHIECFGC. HDIBRAFCGD. HIDBEFGAC78.在一棵二叉树上,度为0的结点个数为n0,度为2的结点数为n2,则n0= A ;A. n2+1B. n2-1C. n2D. n2/279.某二叉树前序遍历结点的访问顺序是ABCDEFG,中序遍历结点的访问顺序是CBDAFGE,则其后序遍历结点的访问顺序是 A ;A.CDBGFEA B. CDGFEABC. CDBAGFED. CDBFAGE80.在下列存储形式中, D 不是树的存储形式;A. 双亲表示法B. 孩子链表表示法C. 孩子兄弟表示法D. 顺序存储表示法81. 已知一棵二叉树的中序序列为cbedahgijf,后序序列为cedbhjigfa,则该二叉树为B ;82. 已知一棵权集W={2,3,4,7,8,9}的哈夫曼树,其加权路径长度WPL为C ;A. 20B. 40C. 80D. 16083.已知一棵度为m的树中有n1个度为1的结点,n2个度为2的结点,…,n m个度为m的结点,问这棵树中叶子结点为C ;A. 1+n i I-1B. 1+n i I+1C. n1+n2+…+n mD. m·n m84.如下图所示的4棵二叉树中, C不是完全二叉树;85.设高度为h的二叉树上只有度为0或度为2的结点,则此类二叉树中所包含的结点数至少为B ;A. 2hB. 2h-1C. 2h+1D. h+186.如下图所示的二叉树的中序遍历序列是C ;A. abcdgefB. dfebagcC. dbaefcgD. defbagc87.已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,则其前序遍历序列为D ;A. acbedB. decabC. deabcD. cedba88.如果T2是由有序树T转换而来的二叉树,则T中结点的前序就是T2中结点的 A ;A. 前序B. 中序C. 后序D. 层次序89.树的基本遍历策略可分为先根遍历和后根遍历;二叉树的基本遍历策略可分为先序遍历、中序遍历和后序遍历;这里,我们把由树转化得到的二叉树叫做这棵树对应的二叉树;下面结论正确的是A ;A. 树的先根遍历序列与其对应的二叉树的先序遍历序列相同B. 树的先根遍历序列与其对应的二叉树的后序遍历序列相同C. 树的先根遍历序列与其对应的二叉树的中序遍历序列相同D. 以上均不对90. 深度为5的二叉树至多有C个结点;A. 16B. 32C. 31D. 1091. 在一非空二叉树的中序遍序序列中,根结点的右边 A ;A. 只有右子树的所有结点B. 只有右子树的部分C. 只有左子树的部分结点D. 只有左子树的所有结点 92. 树最适合用来表示 C ;A. 有序数据元素B. 无序数据元素C. 元素之间具有分支层次关系的数据D. 元素之间无联系的数据93. 设n,m 为一棵二叉树上的两个结点,在中序遍历时,n 在m 前的条件是 C ; A. n 在m 的右方 B. n 是m 的祖先 C. n 在m 的左方D. n 是m 的子孙94.对一个满二叉树,m 个树叶,n 个结点,深度为h,则 D ;A. n=h+mB. h+m=2nC. m=h-1D. n=2h-1 95.如果某二叉树的前序为stuwv,中序为uwtvs,则该二叉树后序为 C ;A. uwvtsB. vwutsC. wuvtsD. wutsv96.设待排序的记录为20,16,13,14,19,经过下列过程将这些记录排序;20,16,13,14,19 16,20,13,14,19 13,16,20,14,19 13,14,16,20,19 13,14,16,19,20所用的排序方法是 A ; A. 直接插入排序 B. 冒泡排序 C. 希尔排序D. 堆排序97.对下列4个序列用快速排序的方法进行排序,以序列的第一个元素为基础进行划分,在第一趟划分过程中,元素移动次数最多的是 A 序列; A. 70,75,82,90,23,16,10,68 B. 70,75,68,23,10,16,90,82 C. 82,75,70,16,10,90,68,23 D. 23,10,16,70,82,75,68,9098.用快速排序的方法对包含几个关键字的序列进行排序,最坏情况下,执行的时间为 D ; A. OnB. Olog 2nC.Onlog 2nD. On 299.在所有排序方法中,关键码即关键字比较的次数与记录的初始排列次序无关的是 D ; A. 希尔排序B. 冒泡排序C. 直接插入排序D. 直接选择排序100.在归并排序过程中,需归并的趟数为 C ; A. nB. nC. ⎣⎦n n 2logD. ⎣⎦n 2log101.一组记录的排序代码为{46,79,56,38,40,84},则利用堆排序的方法建立的初始堆为 B ;A. {79,46,56,38,40,80}B. {84,79,56,38,40,46}C. {84,79,56,46,40,38}D. {84,56,79,40,46,38}102.一组记录的排序代码为{46,79,56,38,40,84},则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为 C ;A. {38,40,46,56,79,84}B. {40,38,46,79,56,84}C. {40,38,46,56,79,84}D. {40,38,46,84,56,79}103.每次把待排序的区间划分为左、右两个子区间,其中左区间中元素的排序码均小于等于基准元素的排序码,右区间中元素的排序码均大于等于基准元素的排序码,此种排序方法叫做 B ;A. 堆排序B. 快速排序C. 冒泡排序D. 希尔排序104.一组记录的排序码为一个字母序列{Q,D,F,X,A,P,N,B,Y,M,C,W},按归并排序方法对该序列进行一趟归并后的结果为 D ;A. D,F,Q,X,A,B,N,P,C,M,W,YB. D,F,Q,A,P,X,B,N,Y,C,M,WC. D,Q,F,X,A,P,N,B,Y,M,C,WD. D,Q,F,X,A,P,B,N,M,Y,C,W105.一组记录的排序码为{25,48,16,35,79,82,23,40,36,72},其中,含有5个长度为2的有序表,按归并排序方法对该序列进行一趟归并后的结果为 A ;A. 16,25,35,48,23,40,79,82,36,72B. 16.25,35,48,79,82,23,36,40,72C. 16,25,48,35,79,82,23,36,40,72D. 16,25,35,48,79,23,36,40,72,82106.设有1000个无序的元素,希望用最快的速度挑选出其中前10个最大的元素,最好选用C排序法;A. 冒泡排序B. 快速排序C. 堆排序D. 希尔排序107.在待排序的元素序列基本有序的前提下,效率最高的排序方法是 A ;A. 插入排序B. 选择排序C. 快速排序D. 归并排序108.用某种排序方法对线性表{25,84,21,47,15,27,68,35,20}进行排序时,元素序列的变化情况如下:1 25,84,21,47,15,27,68,35,202 20,15,21,25,47,27,68,35,843 15,20,21,25,35,27,47,68,844 15,20,21,25,27,35,47,68,84则所采用的排序方法是 D ;A. 选择排序B. 希尔排序C. 归并排序D. 快速排序109. 快速排序方法在C情况下最不利于发挥其长处;A. 要排序的数据量太大B. 要排序的数据中含有多个相同值C. 要排序的数据已基本有序D. 要排序的数据个数为整数110. 设有一个已按各元素的值排好序的线性表,长度大于2,对给定的值K,分别用顺序查找法和二分查找法查找一个与K相等的元素,比较的次数分别为s和b;在查找不成功的情况下,正确的s和b的数量关系是 B ;A. 总有s=bB. 总有s>bC. 总有s<bD. 与k值大小有关111. 如果要求一个线性表既能较快地查找,又能适应动态变化的要求,则可采用的方法是A ;A. 分块法B. 顺序法C. 二分法D. 哈希法112. 哈希表的地址区间为0-17,哈希函数为Hk=k mod 17;采用线性探测法处理冲突,并将关键字序列{26,25,72,38,8,18,59}依次存储到哈希表中;那么,元素59存放在哈希表中的地址是 D ; A. 8 B. 9C. 10D. 11113. 哈希表的地址区间为0-17,哈希函数为Hk=k mod 17;采用线性探测法处理冲突,并将关键字序列{26,25,72,38,8,18,59}依次存储到哈希表中;如果要访问元素59,则需要的搜索次数是C ;A. 2B. 3C. 4D. 5114.在计算机系统中,允许多个程序同时进入内存并运行,这种方法称为 D ;A. Spodling技术B. 虚拟存储技术C. 缓冲技术D. 多道程序设计技术115.分时系统追求的目标是 C ;A. 高吞吐率B. 充分利用内存C. 快速响应D. 减少系统开销116.引入多道程序的目的是 D ;A. 提高实时响应速度B. 增强系统交互能力C. 为了充分利用主存储器D. 充分利用CPU,减少CPU等待时间117.若把操作系统看作计算机系统资源的管理者,下列 D 不属于操作系统所管理的资源; A. 程序 B. 内存C. CPUD. 中断118. A 不属于多道程序设计的概念;A. 多个用户同时使用一台计算机的打印设备B. 多个用户同时进入计算机系统,并要求同时处于运行状态C. 一个计算机系统从宏观上进行作业的并行处理,但在微观上仍在串行操作D. 多个作业同时存放在主存并处于运行状态119.操作系统的CPU管理主要是解决 C ;A. 单道程序对CPU的占用B. 多道程序对CPU的占用C. 多道程序对CPU的分配D. 多道程序或单道程序对CPU的争夺120.分时操作系统是指 B ;A. 多个用户分时使用同一台计算机的某一个终端B. 多道程序分时共享计算机的软、硬件资源C. 多道程序进入系统后的批量处理D. 多用户的计算机系统121. A 不是实时系统的特征;A. 很强的交互性B. 具有对用户信息的及时响应性C. 具有很强的可靠性D. 有一定的交互性122.工业过程控制系统中,运行的操作系统最好是 B ;A. 分时系统B. 实时系统C. 分布式操作系统D. 网络操作系统123. 对处理事件有严格时间限制的系统是 B ;A. 分时系统B. 实时系统C. 分布式操作系统D. 网络操作系统。
软件技术基础知识
软件技术基础知识第一章1、算法和算法的特点2、数据结构:指相互关联的数据元素的集合。
数据结构分为逻辑结构和物理结构。
逻辑结构:表示了数据的逻辑关系(前后件关系)。
按照逻辑关系的不同分为:线形结构和非线形结构。
物理结构:表示了数据在计算机上的存放形式,也称存储结构。
按照存放形式的不同分为:顺序存储和链式存储。
3、线形结构的条件:4、线形结构通常称之为线性表。
顺序存储的线性表称为顺序表,链式存储的线性表称为线性链表。
5、对与空的数据结构可以为线性结构也可以为非线性结构。
6、顺序表和线性链表的特点。
7、栈和队列的特点。
8、栈和队列可以采用顺序存储也可以采用链式存储。
9、双向链表和循环队列。
10、树和二叉树11、二叉树的基本性质①第k层最多具有的结点数。
②深度为k的二叉树最具有的结点数。
③任何二叉树对为0的结点数和度为2的结点数的关系。
12、满二叉树的特点。
13、完全二叉树的特点。
14、二叉树的遍历15、顺序查找适用的情况。
对长度为n的线形表进行顺序查找最坏的情况需要查找的次数。
16、二分法查找适用的情况。
对长度为n的线形表进行二分法查找最坏的情况需要查找的次数。
17、排序的分类。
交换类排序:冒泡排序法,最坏的情况需要比较的次数。
插入类排序法,堆排序法。
第二章1、编程的良好习惯要求:根据需要添加相应的注释,应该有良好的视觉组织,在完成功能的前提下,优先考虑可读性和清晰性,然后在考虑效率。
2、注释的分类:序言性注释和功能性注释。
3、结构化程序设计的原则。
4、结构化程序设计的基本结构。
5、对象是属性和行为的封装体。
6、对象的基本特点:标识唯一性,分类性,多态性,封装性,摸快独立性。
7、类和实例之间的关系。
类是具有共同属性和方法对象的集合,是关于对象的抽象,一个具体的对象则称之为类的一个实例。
8、消息。
9、继承、多态性。
第三章1、软件的定义及软件的特点软件是程序、数据及相关文档的集合。
特点:2、软件危机是开软件过程中所遇到的一系列的严重问题。
计算机软件技术基础教程(第二版)习题及答案
第1章习题部分答案1. 操作系统的发展分为那几个阶段?解:操作系统的发展经历了三个阶段:操作系统的酝酿阶段、操作系统的形成阶段、操作系统的理论化和标准化阶段。
2. 计算机软件技术开发系统包括那几个阶段?解:计算机软件开发系统的发展经历了四个阶段:机器语言阶段、汇编语言阶段、高级语言阶段、面向对象语言和可视化语言阶段。
3. 计算机软件技术的主要范畴是什么?解:计算机软件技术的主要范畴包括软件工程技术、程序设计技术、软件工具环境技术、系统软件技术、数据库技术、实时软件技术、网络软件技术、与实际工作相关的软件技术等八个领域的内容。
4. 从软件技术的发展现状来看有哪些值得我们注意的问题?解:从软件技术的发展现状来看有以下几个值得我们注意的问题:1)软件危机2)软件技术标准,软件版权和软件价值评估3)软件技术的基础研究。
1第2章习题部分答案1. 什么是软件危机?软件危机的表现有哪些?解:软件开发技术的进步为能满足发展的要求,在软件开发中遇到的问题找不到解决的方法,问题积累起来形成了尖锐的矛盾,导致了软件危机。
2. 软件危机产生的原因是什么?解:造成软件危机的原因是由于软件产品本身的特点以及开发软件的方式、方法、技术和人员引起的。
1)软件规模越来越大,结构越来越复杂。
2)软件开发管理困难而复杂。
3)软件开发费用不断增加。
4)软件开发技术落后。
5)生产方式落后。
6)开发工具落后,生产率提高缓慢。
3. 常见的软件过程模型有哪些?解:常见的软件过程模型有瀑布模型、增量模型、演化过程模型、敏捷开发4. 如何对软件质量进行评价?解:软件质量的评价主要围绕可维护性、可靠性、可理解性和效率这几个方面进行。
2第3章习题部分答案1. 软件可行性研究的目的是什么?软件可行性研究的任务又是什么?解:软件可行性研究的目的就是用最小的代价在尽可能短的时间内确定该软件项目是否能够开发,是否值得去开发。
可行性研究的任务首先需要进行概要的分析研究,初步确定项目的规模和目标,确定项目的约束和限制,把他们清楚地列举出来。
2016现代科技学院《软件技术基础》练习题+答案
《软件技术基础》练习题太原理工大学现代科技学院2016第一章算法一、选择题1. 算法的复杂度包括【】。
A、时间复杂度B、空间复杂度C、时间及空间复杂度D、以上都不对2. 若x在长度为n的无序线性顺序表中的概率为50%,则在该表中查找x的平均查找次数(平均性态分析)为【】。
A、(n*3+1)/4B、(n-1)/2C、(n+1)/2D、(n+1)*n/23. 若x在长度为n的无序线性顺序表中的概率为50%,则在该表中查找x的最坏情况分析为【】。
A、n/2B、(n-1)/2C、(n+1)/2D、n4. 已知基本运算执行次数与n的关系,则下列哪个时间复杂度最大:【】。
A. f(n) = 1B. f(n) = 2n - 1C. f(n) = 10000n+10000D. f(n) = n2-100005. 算法分析的目的是【】。
A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性二、填空题1. 常用算法包括_________、_________、_________、_________、_________和回溯法。
2. 算法的基本特征有_________、_________、有穷性、输入和输出。
3. 下列程序段的时间复杂度是____。
for (i=1;i<=n;i++)A[i,i]=0;4.下列程序段的时间复杂度是____s=0;for(i=1;i<=2n;i++)for(j=1;j<=n;j++)s=s+B[i][j];sum=s;5. 下列程序段的时间复杂度是____i=1;while (i<=n)i=i*2;6. 在下面的程序段中,s= s + p;语句的执行次数为_________,p= p×j语句的执行次数为_________ ,该程序段的时间复杂度为________ 。
int i=0, s=0, p=1;while( ++i<=n ){for(j=1; j<=i; j++ )p = p×j;s = s + p;}7. 常见时间复杂度的量级有:常数阶O(_________)、对数阶O(_________)、线性阶O(_________)、平方阶O(_________)和指数阶O(_________)。
《计算机软件技术基础》课后题答案
数据结构习题答案第一节概论一、选择题1.要求同一逻辑结构的所有数据元素具有相同的特性,这意味着( )。
A.数据元素具有同一的特点 *B.不仅数据元素包含的数据项的个数要相同,而且对应数据项的类型要一致 C.每个数据元素都一样 D.数据元素所包含的数据项的个数要相等2.数据结构是一门研究非数值计算的程序设计问题中计算机的( (1) )以及它们之间的( (2) )和运算的学科。
(1) A.操作对象 B.计算方法 *C.物理存储 D.数据映像(2) A.结构 *B.关系 C.运算 D.算法3.数据结构被形式地定义为(D,R),其中D是( (1) )的有限集合,R是D上( (2) )的有限集合。
(1) A.算法 *B.数据元素 C.数据操作 D.逻辑结构(2)A.操作 B.映像 C.存储 *D.关系4.在数据结构中,从逻辑上可以把数据结构分为( )。
A.动态结构和静态结构 B.紧凑结构和非紧凑结构 *C.线性结构和非线性结构 D.内部结构和外部结构5.线性表的顺序存储结构是一种( )的存储结构。
*A.随机存取 B.顺序存取 C.索引存取 D.Hash存取6.算法分析的目的是( )。
A.找出数据结构的合理性 B.研究算法中的输入和输出的关系 *C.分析算法的效率以求改进 D.分析算法的易懂性和文档性7.计算机算法指的是( (1) ),它必须具备输入、输出和( (2) )等五个特征。
(1) A.计算方法 B.排序方法 *C.解决某一问题的有限运算序列D.调度方法(2) A.可行性、可移植性和可扩充性 *B.可行性、确定性和有穷性 C.确定性,有穷性和稳定性 D.易读性、稳定性和安全性8.线性表若采用链表存储结构,要求内存中可用存储单元的地址( )。
A.必须是连续的 B.部分必须是连续的 C.一定是不连续的 *D.连续不连续都可以9.在以下的叙述中,正确的是( )。
A.线性表的线性存储结构优于链式存储结构 *B.二维数组是它的每个数据元素为一个线性表的线性表 C.栈的操作方式是先进先出 D.队列的操作方式是先进后出10.根据数据元素之间关系的不同特性,以下四类基本的逻辑结构反映了四类基本的数据组织形式,其中解释错误的是( )。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
typedef struct node { elemtype data; struct node * next; } ; ///结点的定义 ///结点的定义
链表的定义
a1
head
a2
length
链表尾
……
an
^
tail
由链点及链点相互间的链接构成 链表头 链表长度(节点数目) 链表长度(节点数目) 为了算法实现上的方便, 为了算法实现上的方便,通常在单链表的第一个元 素之前附加一个称为头结点的元素. 素之前附加一个称为头结点的元素.
顺序存储结构的特点: 顺序存储结构的特点:
元素随机获取特性
存储时间短 存储时间与位置无关
元素更动的搬移性(插入,删除) 元素更动的搬移性(插入,删除)
运算效率低, 运算效率低,需大量移动数据 预先确定数据元素最大个数, 预先确定数据元素最大个数,使计算机预先分 配相应存储空间,使存储器使用效率不高. 配相应存储空间,使存储器使用效率不高.
线性表特点:元线性. 特点 线性
(1)有且仅有一个开始节点(该节点只有一个 有且仅有一个开始节点( 后继节点,没有前趋节点) 后继节点,没有前趋节点) (2)有且仅有一个结束节点(该节点只有一个 有且仅有一个结束节点( 前趋节点,没有后继节点) 前趋节点,没有后继节点) (3)其余节点有且仅有一个前趋和一个后继
线性表的基本操作有以下几种: 线性表的基本操作有以下几种:
INITIATE(L).初始化操作,设定一个空线性表L (1) INITIATE(L).初始化操作,设定一个空线性表L. (2) LENGTH(L).求表长,求线性表L中数据元素个数 LENGTH(L).求表长,求线性表L (3) GET(L,i).取元素函数,若1≤i≤LENGTH(L),则 GET(L,i).取元素函数, 1≤i≤LENGTH(L), 函数值为给定线性表L中第i个数据元素, 函数值为给定线性表L中第i个数据元素,否则为空元 素NULL. NULL. 定位函数, (4) LOCATE(L,x).定位函数,返回元素x在线性表L 中的位置. 的位置, 中的位置.若L中有多个x,则只返回第一个x的位置, 若在L中不存在x,返回0. 插入操作, (5) INSERT(L,i,x).插入操作,在线性表L中的第i 个位置插入元素x,结果使线性表的长度增加1.
}
编写算法的一般步骤 编写算法的一般步骤: 编写算法的一般步骤:
1,分析问题描述
输入,输出及模块功能等 输入,
2,分析算法实现的总体框架,关键问题的 分析算法实现的总体框架, 突破方法 3,核心算法的实现 4,算法补充完善
如:增加算法有效性的保护措施——越界判断 增加算法有效性的保护措施——越界判断
删除操作, (6) DELETE(L,i).删除操作,若1≤i≤LENGTH(L),删 个数据元素, 除给定线性表L中的第i个数据元素,使得线性表的 长度减1.
一,顺序表
用数组实现的线性表(顺序存储) 用数组实现的线性表(顺序存储) 线性表元素:a1,a2,a3, 线性表元素:a1,a2,a3,a4.... 数组元素: a[0],a[1],a[2],a[3] 数组元素: a[0],a[1],a[2],
l:线性表指针
即:int delete_l(listtype * l, int i) { 1,从ai+1节点开始,逐个向前搬动节点, 节点开始,逐个向前搬动节点,
挤掉第i 挤掉第i个元素 2,数组长度因为减少了一个元素而减一 }
#define true 1 #define false 0 void delete_l(listtype *l, int i) { int j; if(i < 0 || i > l->num) { printf("not exist"); return(false); } for(j = i+1 ; j < 1->num; j++) l->data[ j-1 ] = l->data[ j ]; l->num - -; return (true);
a1
head
……
an
^
头结点可以不存放任何数据, 头结点可以不存放任何数据,也可以存放像线性表 的表长的数据信息. 的表长的数据信息.
head
^
带头结点的空表
对单链表的初始化,就是建立一个空的单链表. 对单链表的初始化,就是建立一个空的单链表.
///单链表的初始化 ///单链表的初始化 void initiatesl (node * *h) { *h=(node *)malloc (sizeof (node)); (*h)->next=NULL; }
用链表实现线性表(非连续存储) 用链表实现线性表(非连续存储)
线性表元素:a1,a2,a3, 线性表元素:a1,a2,a3,a4.... 线性关系: 线性关系:a1 a2 a3 a4 链表链点 指针域,指针关系 指针域,
1,单向链表
链点
data
next
指针域 元素域 元素域(数据元素域):存放一个数据元素. ):存放一个数据元素 元素域(数据元素域):存放一个数据元素. 指针域(关系域): ):存放指向下一个元素的指针 指针域(关系域):存放指向下一个元素的指针 ——元素间的关系 ——元素间的关系. 元素间的关系. 元素域 + 指针域 = 结点(链点) 结点(链点) 链表数据元素的定义 元素值的类型, 元素值的类型, 如: int 整形 char 字符型 long 长整形 ……
线性结构是数据结构中最简单且最常用 的一种数据结构. 基本特点是:数据元素有序并有限. 基本特点是:数据元素有序并有限. 线性结构的逻辑特征是:
有且仅有一个开始数据元素和一个终点数 据元素 并且所有数据元素都最多只有一个直接前 趋和一个直接后继
例如:线性表,堆栈,队列,数组, 例如:线性表,堆栈,队列,数组,串等
a1 a2 ai-1 ai ai+1
……
an
x a1 a2 ai-1 ai ai+1 …… an
插入运算
算法
void insertl( listtype *l, int i, elemtype x) { } l: 指向线性表的指针 x:需要插入的元素 i:插入的位置,在其之后插入 插入的位置,
输入: 输入:
}
【算法2】删除运算 算法2
问题描述:删除第i 问题描述:删除第i个元素 算法实现分析
a1 a2 ai-1 ai ai+1 -
…
an
a1 a2 ai-1 ai ai+1 -
…
an
删除运算
算法 int delete_l(listtype * l, int i) { }
输入 输出
l:线性表指针 i:需要删除的节点位置
注:(* *h) h是指向node型指针的指针 h是指向 是指向node型指针的指针
单向链表的基本操作
(1)访问操作
问题描述:访问链表的第i个节点 问题描述:访问链表的第i 问题分析: 问题分析:
输入:链表,i 输入:链表, 输出:链点——指向链点的指针 输出:链点——指向链点的指针
算法实现分析: 算法实现分析: 只能从链表头开始,一个个"数"下去,直到第i个 只能从链表头开始,一个个" 下去,直到第i
软件技术基础
线性结构
1.2 线性数据结构
目的要求: 目的要求: 了解线性结构的类型; 了解线性结构的类型; 掌握顺序表,单向链表的特点及算法; 掌握顺序表,单向链表的特点及算法; 掌握栈,队列的特点及相关运算; 掌握栈,队列的特点及相关运算; 掌握数组的特点及存储; 掌握数组的特点及存储; 了解串的概念. 了解串的概念.
{ int id;
voidchar name[20]; initiatelist (listtype *l) *l { int classes; l-float score[4]; >num=0; }
} elemtype;
2,顺序表的操作(遍历,插入,删除等) 遍历,插入,删除等)
【算法1】插入运算 算法 】 问题描述 以a1开始的线性表中 在第i个元素前插入一个新元素 . 在第 个元素前插入一个新元素x. 个元素前插入一个新元素 在将表长num+1 + 在将表长
线性关系: 线性关系: a1 a2 a3 a4
数组下标大小 1,定义:元素类型 线性表名称[ 线性表长度 ] 定义: 线性表名称[ 例: int
data[ max_length ];
ai data[ i ]
以 a0开始的线性表-- a0 ,a1,a2,a3…… 开始的线性表--
设有顺序表(a 设有顺序表(a1,a2,...,an),若一个数 ..., 据元素占k个存储单元. 据元素占k个存储单元. 若用Loc表示某元素的地址, 若用Loc表示某元素的地址,则线性表 表示某元素的地址 中第i个数据元素的存储地址为: 中第i个数据元素的存储地址为: Loc(ai)= Loc(a1)+(i-1)*k )+(i其中, 其中,Loc(a1)是线性表第一个数据元素的存 储地址,通常称做线性表的起始地址. 储地址,通常称做线性表的起始地址.
a1
head
p p p
……
an
^
h
a1
a2
ai
ai+1
an
elemtype access(node *h, int i ) { node * p; int i; p = h; j = 0; while( j < i && p->next != NULL) { p = p -> next; 注意 j + +; 1,p = p->next ; p} 沿链表前进 if( p != NULL&&j= =i) return (p->data); 2,循环结束条件 else j==i或 return (NULL); p->next = = NULL