期末数据结构复习习题(含答案)18页的word文档的复习题 轻松通过考试
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
p=L->next; while ( p!=NULL && p->data <x) { q=p; p=p->next; } s->next=q->next; q->next=s ; return L; } 3.在长度大于 1 的单循环链表 L 中,既无头结点也无头指针。s 为指向链表中某个结点的指 针,试编写算法删除结点*s 的直接前趋结点。 //条件是长度大于一 #include <iostream> using namespace std; typedef struct Lnode { ElemType data; struct Lnode *next; } LNode , *LinkList; bool delete_prior(LinkList s) { LinkList p; LinkList q; q=s; p=s->next; while(p->next!=s) { q=p; p=p->next; } q->next =s; delete p; } 五、程序填空题 1、 下面是用 c 语言编写的对不带头结点的单链表进行就地逆置的算法,该算法用 L 返回逆 置后的链表的头指针,试在空缺处填入适当的语句。 void reverse(linklist &L){ p=null;q=L; while(q!=null) { (1) L=L->next ; q->next=p;p=q;(2) q=L ___ ; } 4
数据结构练习题 数据结构练习题(1-5 章) 一、选择题 1、从逻辑上可以把数据结构分为( C )两大类。 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 2、以下数据结构中,哪一个是线性结构( D )? A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串 3、在下面的程序段中,对 x 的赋值语句的频度为( C ) for (i=1;i<=n;i++) for (j=1;j<=n;i++) x=x+1; A. O(2n) B.O(n) C.O(n2) D.O(log2n) 4、下面关于线性表的叙述中,错误的是哪一个?( B ) A.线性表采用顺序存储,必须占用一片连续的存储单元。 B.线性表采用顺序存储,便于进行插入和删除操作。 C.线性表采用链接存储,不必占用一片连续的存储单元。 D.线性表采用链接存储,便于插入和删除操作。 5、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用 ( D )存储方式最节省运算时间。 A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链 表 6、 静态链表中指针表示的是( B ). A. 内存地址 B.数组下标 C.下一元素地址 D.左、右孩子地址 7、下面的叙述不正确的是( BC ) A.线性表在链式存储时,查找第 i 个元素的时间同 i 的值成正比 B. 线性表在链式存储时,查找第 i 个元素的时间同 i 的值无关 C. 线性表在顺序存储时,查找第 i 个元素的时间同 i 的值成正比 D. 线性表在顺序存储时,查找第 i 个元素的时间同 i 的值无关 8、 若长度为 n 的线性表采用顺序存储结构,在其第 i 个位置插入一个新元素的算法的时间 复杂度为( C )(1<=i<=n+1)。 A. O(0) B. O(1) C. O(n) D. O(n2) 9、在单链表指针为 p 的结点之后插入指针为 s 的结点,正确的操作是: ( B ) 。 A.p->next=s;s->next=p->next; B. s->next=p->next;p->next=s; C.p->next=s;p->next=s->next; D. p->next=s->next;p->next=s; 10、对于一个头指针为 head 的带头结点的单链表,判定该表为空表的条件是( B ) A.head==NULL B.head→next==NULL C.head→next==head D.head!=NULL 11、 一个栈的输入序列为 123…n,若输出序列的第一个元素是 n,输出第 i(1<=i<=n)个 元素是( B ) 。 A. 不确定 B. n-i+1 C. i D. n-i 12、 有六个元素 6, 5, 4, 3, 2, 1 的顺序进栈, 问下列哪一个不是合法的出栈序列? ( C ) A. 5 4 3 6 1 2 B. 4 5 3 1 2 6 C. 3 4 6 5 2 1 D. 2 3 4 1 5 6 13、 设有三个元素 X,Y,Z 顺序进栈(进的过程中允许出栈) ,下列得不到的出栈排列是 ( C )。 A.XYZ B. YZX C. ZXY D. ZYX 14、 假设以数组 A[m]存放循环队列的元素,其头尾指针分别为 front 和 rear,则当前队列中 1
while((2)_ p!=NULL __________) { r=L; q=L->next; while((3) q!=NUll _&& q->data<=p->data) {r=q; q=q->next; } u=p->next; (4)_ p->next=q ___ ; p=u;
(5)_ r->next= p_; } }
9、组成串的数据元素只能是__字符___。 10、设有 C 语言描述的二维数组 A[10][20],其每个元素占两个字节,第一个元素的存储地址 为 100,若按行优先顺序存储,则元素 A[6][6]存储地址为__352__。(没说明,则下标从 0 开 始) 四、算法与应用题 1. 设线性表存放在向量 A[arrsize]的前 elenum 个分量中且递增有序,试写一算法将 x 插 入到线性表的适当位置,以保持线性表的有序性并分析其时间复杂度。 #define arrsize 100 bool sortinsert(Elemtype A[],int elenum , Elemtype x) { int i; if(elenum = = arrsize) { printf(“该数组向量已满”); return false; } i=elenum-1; while(A[i]>x && i>=0) { A[i+1]=A[i]; i- -; } A[i+1]=x; return true; }// 2.已知带头结点的动态单链表 L 中的结点是按整数值递增排列的,试写一算法将值 x 为的结 点插入到表 L 中,使 L 仍然有序。 ///线性表的单链表存储结构 typedef struct Lnode { ElemType data; struct Lnode *next; } LNode , *LinkList; LinkList sortinsert(LinkList L,int x) /* 带头结点*/ { LinkList p,q, s; s=(LinkList)malloc(sizeof(LNode)); if(!s) { printf(“动态空间分配不成功”); exit(-1);} s->data=x; q=L; 3
第六章练习 选择题 1. 设树 T 的度为 4,其中度为 1,2,3 和 4 的结点个数分别为 4,2,1,1 则 T 中的叶子数 为( D )A.5 B.6 C.7 D.8 2. 设森林 F 对应的二叉树为 B,它有 m 个结点,B 的根为 p,p 的右子树结点个数为 n,森林 F 中第一棵树的结点个数是( A ) A.m-n B.m-n-1 C.n+1 D.条件不足,无法确定 3.若一棵二叉树具有 10 个度为 2 的结点,5 个度为 1 的结点,则度为 0 的结点个数是(B ) A.9 B.11 C.15 D.不确定 4.具有 10 个叶结点的二叉树中有( B )个度为 2 的结点, A.8 B.9 C.10 D.ll 5.一棵完全二叉树上有 1001 个结点,其中叶子结点的个数是( E ) A. 250 B. 500 C.254 D.505 E.以上答案都不对 6. 有 n 个叶子的哈夫曼树的结点总数为( D ) 。 A.不确定 B.2n C.2n+1 D.2n-1 7. 一棵具有 n 个结点的完全二叉树的树高度(深度)是( A ) 5
(3) L=p; } } } 2、对单链表中元素按插入方法排序的 C 语言描述算法如下,其中 L 为链表头结点指针。请填 充算法中标出的空白处,完成其功能。 (10 分) typedef struct node {int data; struct node *next; }linknode,*link; void Insertsort(link L) { link p,q,r,u; p=L->next; (1) L->next=NULL ___;
的元素个数为( A ) 。 A . (rear-front+m)%m B . rear-front+1 C . (front-rear+m)%m D.(rear-front)%m 15、 若用一个大小为 6 的数组来实现循环队列,且当前 rear 和 front 的值分别为 0 和 3, 当从队列中删除一个元素,再加入两个元素后,rear 和 front 的值分别为多少?( B ) A. 1 和 5 B. 2 和 4 C. 4 和 2 D. 5 和 1 16、下面关于串的的叙述中,哪一个是不正确的?( B ) A. 串是字符的有限序列 B. 空串是由空格构成的串->(空格串是由空格组成的) C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储 17、设有两个串 p 和 q,其中 q 是 p 的子串,求 q 在 p 中首次出现的位置的算法称为( C ) A.求子串 B.联接 C.匹配 D.求串长 18、 设有数组 A[i,j],数组的每个元素长度为 3 字节,i 的值为 1 到 8 ,j 的值为 1 到 10, 数组从内存首地址 BA 开始顺序存放,当用以列为主存放时,元素 A[5,8]的存储首地址为 ( B )。30*6=180 A. BA+141 B. BA+180 C. BA+222 D. BA+225 19、已知广义表 L=( (x,y,z) ,a, (u,t,w) ) ,从 L 表中取出原子项 t 的运算是( D ) 。 A. head(tail(tail(L) ) ) B. tail(head(head(tail(L) ) ) ) C. head(tail(head(tail(L) ) ) ) D. head(tail(head(tail(tail(L) ) ))) 20、广义表 A=(a,b,(c,d),(e,(f,g))),则下面式子的值为( D ) 。 Head(Tail(Head(Tail(Tail(A))))) A. (g) B. (d) C. c D. d 二、判断题 1、 数据元素是数据的最小单位。( × ) 2、算法可以用不同的语言描述,如果用 C 语Βιβλιοθήκη Baidu或 PASCAL 语言等高级语言来描述,则算法实 际上就是程序了。( Y ) 3、 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。( × ) 4、线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。( × ) 5、线性表的特点是每个元素都有一个前驱和一个后继。( × ) 6、一个稀疏矩阵 Am*n 采用三元组形式表示, 若把三元组中有关行下标与列下标的值互换, 并把 m 和 n 的值互换,则就完成了 Am*n 的转置运算。( × ) 7、所谓取广义表的表尾就是返回广义表中最后一个元素。 ( × ) 三、填空题 1、数据的物理结构包括 数据元素 的表示和 关系 的表示。 2、当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线 性表中的元素时,应采用___顺序__存储结构。 3、线性表 L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个 元素平均需要移动元素的个数是_(n-1)/2____。 4、对于一个具有 n 个结点的单链表,在已知的结点*p 后插入一个新结点的时间复杂度为 __O(1)__,在给定值为 x 的结点后插入一个新结点的时间复杂度为___ O(n)_____。 5、带头结点的双循环链表 L 中只有一个元素结点的条件是:__L->next->next==L __ 6、一个栈的输入序列是:1,2,3 则不可能的栈输出序列是__3 1 2___。 7、用 S 表示入栈操作,X 表示出栈操作,若元素入栈的顺序为 1234,为了得到 1342 出栈顺 序,相应的 S 和 X 的操作串为_ SXSSXSXX__。 8、__队列__又称作先进先出表。 2