当前位置:文档之家› 数据结构期末练习题

数据结构期末练习题

1.数据的不可分割的基本单位是 ( A )。

A.元素B.结点C.数据类型D.数据项2.计算机处理数据的最小单位是( D )。

A.元素B.结点C.数据类型D.数据项3.算法是指 ( C )。

A.计算方法B.排序方法C.解决问题的有限运算步骤D.查找方法4.顺序存储结构中数据元素之间的逻辑关系是由( C )表示的A 线性结构B 非线性结构C 存储位置D 指针5.单循环链表的主要优点是( B )。

A 不再需要头指针了B 从表中任一结点出发都能扫描到整个链表;C 已知某个结点的位置后,能够容易找到它的直接前趋;D 在进行插入、删除操作时,能更好地保证链表不断开。

6.一个栈的入栈序列是1,2,3,4,5,则栈的不可能的输出序列是( C )。

A 54321B 45321C 43512D 12345此题的解决步骤是如果出现一个三元素顺序是a、b、c,且a>c>b,则为不可能序列7.常对数组进行的两种基本操作是( B )A.建立和删除B.索引和修改C.插入和修改D.插入和索引8.算法分析的两个主要方面是( A )。

A空间性能和时间性能 B正确性和简明性 C 可读性和文档性 D 数据复杂性和程序复杂性在解决计算机主机与打印机之间速度不匹配问题时通常设置一个打印缓冲区,该缓冲区应该是一个( B )结构。

)(3n O )!(n O )2(n O 键盘中输入并初始化字符串Scanner sc=new Scanner;StringBuffer s=new StringBuffer());2. 定义一个变量char ch;定义一个变量int i;3. 加密过程对字符串中每个字符的ASCII 值+1for(i=0;i<();i++){ch=(i);ch=(char)((int)(ch)+1);(i,ch);}4.输出加密之后的结果"加密之后的字符串是:"+s);5.解密过程对加密串中每个字符的ASCII 值执行-1操作for(i=0;i<();i++){ch=(i);ch=(char)((int)(ch)-1);(i,ch);}6.输出加密之后的结果"解密之后的字符串是:"+s);1.写出利用栈,将非负的十进制整数M转化为基于N的N进制数的算法。

1.定义变量int m,n,e,i;定义栈SeqStack<Integer> s=new SeqStack<Integer>();2.从键盘获取非负的十进制整数"请输入要转换的十进制正数:");Scanner sc=new Scanner;m=();3.获取转化为基于N的N进制数"请输入要转换的数制:");n=();4.用M除N,得到商数和余数,将余数放入栈中;当商数不为0,继续用商数除N,得到新的商数和余数,余数入栈。

当商数为0,循环结束。

while(m!=0){e=m%n;(e);m=m/n;}5.输出转化结果,若N为16时则按照如下规则输出结果"转化结果为:");while()!=true){i=();if(n==16){if(i==10) 'A'+"");else if(i==11) 'B'+"");else if(i==12) 'C'+"");else if(i==13) 'D'+"");else if(i==14) 'E'+"");else if(i==15) 'F'+"");else "");}else "");}}}2.写出利用栈和队列,判断一个字符串是否是回文串的算法。

1.取出字符串中的一个字符,分别入栈和入队列。

boolean pal(String str){for(i=0;i<();i++){ch=(i);(ch); (ch);}2.重复第1步,直到字符串结束。

3.栈顶元素出栈,队头元素出队列,两者比较是否相等如果不相等,则该字符串不是回文串如果相等,重复第3步,直到栈为空或者队列为空。

while()==false){ch1=(); ch2=();if(ch1!=ch2) return false;}4.如果栈为空或者队列为空,则该字符串是回文串。

if()==true) return true;3.写出求n!的递归算法。

int fun(int n){if(n==1||n==0)return 1;elsereturn n*fun(n-1);}4.写出求2个正整数m*n的递归算法。

int mul(int m,int n){if(m==0||n==0)return 0;else if(m==1)return n;else return n+mul(m-1,n);}5.写出递归算法求数组中最大值、最小值和平均值。

求数组中的最大值1.定义递归函数int max(int A[], int n)2.判断n是否为1若n为1则返回结果A[0]跳转至3若n不为1则执行递归体并跳转至2if(n==1) return A[0];elsereturn (max(A,n-1)>A[n-1]max(A,n-1):A[n-1]);3.结束算法求数组中的最小值1.定义递归函数int min(int A[], int n)2.判断n是否为1若n为1则返回结果A[0]跳转至3若n不为1则执行递归体并跳转至2if(n==1) return A[0];elsereturn (min(A,n-1)<A[n-1]min(A,n-1):A[n-1]);3.结束算法求数组平均值1.定义递归函数double avg(int A[],int n)2.判断n是否为1若n为1则返回结果A[0]跳转至3若n不为1则执行递归体并跳转至2if(n==1) return A[0];else return ((A[n-1]+avg(A,n-1)*(n-1))/n);3.结束算法6.写出判断字符串是否是回文串的递归算法。

1.定义递归函数boolean palindrome(StringBuffer s)2.判断s的长度是否为0或为1若s的长度为0或为1则返回结果true并跳转至3若s的头尾不相等则返回false并跳转至3若s的头尾相等则判断原来的字符串去掉头尾字符之后剩余的部分并跳转至2if()==0 || ()==1 )return true;else{if(0)!=()-1))return false;else return palindrome(new StringBuffer(1,()-1)));}3.结束算法输出字符串是否为回文串7.写出实现字符串的逆转操作的递归算法。

1.定义递归函数String reverseString(String s)2.判断字符串是否为空串,或者字符串中只有一个字符,若是跳转至4if()) return s;3. 将字符串头尾字符交换;并交换字符串去掉头尾字符之后的字串后跳转至2。

return reverseString(1))+(0);4.结束算法并输出s三.问答题1.什么是数据结构数据的结构指的是数据元素之间存在的关系,一个数据结构是由n(n≥0)个数据元素组成的有限集合,数据元素之间具有某种特定的关系。

数据结构概念包括三个方面:数据的逻辑结构、数据的存储结构和对数据的操作。

2.什么是逻辑结构数据的逻辑结构分为几类数据的逻辑结构就是来表示数据之间的逻辑关系的。

逻辑结构有四种基本类型:集合结构、线性结构、树状结构和图状结构3.什么是存储结构数据的存储结构有哪些数据的逻辑结构在计算机中的表示。

主要分顺序存储结构和链式存储结构两种。

4.顺序存储结构和链式存储结构的优缺点顺序表中的数据元素是如何存储的链表中的数据元素是如何存储的在什么情况下使用顺序表和链表比较好链式存储结构:(1)占用额外的空间以存储指针(浪费空间)(2)存取某个元素速度慢(3)插入元素和删除元素速度快(4)没有空间限制,存储元素的个数无上限,基本只与内存空间大小有关.顺序存储结构:(1)空间利用率高(2)存取某个元素速度快(3)插入元素和删除元素存在元素移动,速度慢,耗时(4)有空间限制,当需要存取的元素个数可能多于顺序表的元素个数时,会出现"溢出"问题.当元素个数远少于预先分配的空间时,空间浪费巨大.顺序存储占用物理地址连续的一块空间来存储元素,元素之间的关系就是相邻元素间的关系;链式存储占用的物理地址可连续可不连续,所以要找到某个元素的后继必须用指针来指示。

以查找为主用顺序表,以插入为主用链表。

5.什么是算法算法的五大特性是什么怎么描述算法1.有穷性,算法是执行时候运行的有穷性,程序只是一段实现算法的代码2.确定性,算法对于特定的输入有特定的输出,程序提供了确定算法结果的平台3.可行性,算法需要考虑设计的可能,程序则具体是实现算法上的设计4.输入,算法有输入,算法的输入依靠程序的平台提供5.输出,算法的输出也靠代码的支持。

可以用伪代码,用自然语言也可以描述算法的方法有多种,常用的有自然语言、结构化流程图、伪代码和PAD 图等,其中最普遍的是流程图。

6.栈是什么请描述栈的操作特性,并画图说明。

栈是一种特殊的线性表,其插入和删除操作只允许在线性表的一段进行。

允许操作的一段称为栈顶,不允许操作的一段称为栈底。

操作特性为:后进先出7.队列是什么队列的操作特性队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

先进先出8.请阐述栈和队列的异同点。

栈是限定只能在表的一端进行插入和删除操作的线性表。

队列是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。

从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同。

但它们是完全不同的数据类型。

除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的"限定"。

栈和队列是在程序设计中被广泛使用的两种线性数据结构,它们的特点在于基本操作的特殊性,栈必须按"后进先出"的规则进行操作,而队列必须按"先进先出"的规则进行操作。

和线性表相比,它们的插入和删除操作受更多的约束和限定,故又称为限定性的线性表结构。

9.什么是递归递归的两个基本要素是什么请阐述递归程序和非递归程序的优缺点。

相关主题