算法基础
Posted javabai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法基础相关的知识,希望对你有一定的参考价值。
1.一个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列是
A.edcba B.decba C.dceab D.Abcde
答:C
2. 己知循环队列存储在一维数组A[O…n-1]中,且队列非空时front和rear分别指向队头元素和队尾元索。若初始时队列为空,且要求第1个进入队列的元素存储在A[0]处,则初始时front和rear的值分别是
A.0,0 B.0,n-1 C.n-l,0 D.n-1,n-l
答: B
3. 给定具有n个元素的顺序表,建立一个有序线性链表的时间复杂度为
A. O(1) B. O(n) C. O(n2) D. O(log2n)
答:C
因为o(n^2) ,对单链表而言,一些快速的排序算法,不能用,只能用直接插入等o(n^2) 级的排序算法来实现排序。
4. 从逻辑上可以把数据结构分为 两大类。
A.动态结构、静态结构
B.顺序结构、链式结构
C.线性结构、非线性结构
D.初等结构、构造型结构
答:C
数据的逻辑结构分两大类:线性结构 和 非线性结构 数据的存储方法有四种:顺序存储方法 、 链接存储方法 、 索引存储方法和散列存储方法 .
5. 数据采用链式存储结构,要求 。
A. 每个链结点占用一片地址连续的存储空间
B. 所有链结点占用一片地址连续的存储空间
C. 链结点的最后那个域一定为指针域
D. 每个链结点有多少个直接后继结点,它就应该设置多少个指针域
答:A
6. 在一个具有n个链结点的线性链表中查找某一个链结点,若查找成功,需要平均比较
个链结点。
- n B. n/2 C. (n+1)/2 D. (n-1)/2
答:B
考虑n种情况,分别比较1个到n-1个(最后一个不需要比较,比较来干嘛 前面都不是最后一个肯定是了)
总共比较(n/2)(1+n-1)(1/n)
7. 将8阶三对角矩阵中的所有非零元素按照行序为主序方式依次存放于一维数组中,一维数组中的第15个数组元素是矩阵的 的那个元素。
A.第5行第3列 B. 第5行第6列
C. 第6行第6列 D. 第6行第5列
答:D
三对角矩阵按照行序排列,数据结构:P140
8. 在非空双向循环链表中由q所指的那个链结点前面插入一个由p所指的链结点的动作所对应的语句依次为:p一>rlink=q; p一>llink=q一>llink; q一>llink=p; 。(空白处为一条赋值语句)
A. q一>rlink= p;
B. q一>llink一>rlink=p;
C. p一>rlink一>rlink= p;
D. p一>llink一>rlink=p;
答:D
1.因为p指向的是单链表中的某个结点x 所以p.next指向的就是x后面的那个结点,如果先把p.next修改了 那就意味着x后面那个结点丢失了(因为没有指针指向它了) 这样整条链就断开了 这是不允许的
2.正确的步骤是 <1>用q.next记住p.next (q.next=p.next) <2>把q连接到p的后面(p.next=q)
3.p.next=q.next 他本来的意思是 把q后面那个结点连接到p后面 但是他在这道题里没有任何意义 因为一开始q后面没有任何结点
P->lLink->rLink=p即:存放的是p所指结点本身。
数据结构P72页图
向前插入:
newNode->lLink=current->lLink;
Current->lLink=newNode;
newNode->lLink->rLink=newNode;
newNode->rLink=current;
向后插入:
newNode->rLink=current->rLink;
Current->rLink=newNode;
NewNode->rLink->lLink=newNode;
newNode->lLink=Current;
总共操作四个指针。
9. 若元素a,b,c,d,e,f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈操作,则不可能得到的出栈序列是 。
A.dcebfa B.cbdaef C.abdcef D.Afedcb
答:C、D
10. 一个栈的输入序列为1,2,3...n,若输出序列的第一个元素是n,则输出第i(1<=i<=n)个元素是
A. 不确定 B. n-i+1 C. i D. n-i
答:B
11. 递归调用时系统需要利用一个 来实现数据和控制的转移。
A. 队列
B. 优先级队列
C. 双端队列
D. 栈
答:D
12. 链表不具有的特点是()
A.插入、删除不需要移动元素 B.可随机访问任一元素
C.不必事先估计存储空间 D.所需空间与线性长度成正比
答:B
13. 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为()(1<=i<=n+1)。
A. O(0) B. O(1) C. O(n) D. O(n2)
答:C
14. 在一个以 h 为头的单循环链表中,p 指针指向链尾的条件是。
A. p->next = h B. p->next = NULL C. p->next->next = h D. p->data = -1
答:A
15. 在循环队列中,若front与rear分别表示队头元素和队尾元素的位置,则判断队列空的条件是
A. front=rear+1 B. rear=front+1 C. front=rear D.front=0
答:C
- 将下列复杂度由小到大重新排序: 1. n*log2(n), 2. n+n^2+n^3, 3. 2^4, 4. n^0.5
- 3,4,2,1 B. 3,4,1,2 C. 4,3,2,1 D. 4,3,1,2
答:B
17. 数据采用链式存储结构,要求 。
A. 每个链结点占用一片地址连续的存储空间
B. 所有链结点占用一片地址连续的存储空间
C. 链结点的最后那个域一定为指针域
D. 每个链结点有多少个直接后继结点,它就应该设置多少个指针域
答:A
18. 假设n为2的乘幂,并且n>2,下面算法的时间复杂度及变量count的值是
(以n的函数形式表示,计算机科学中,除非特别声明,对数都是以2为底,即log2X可表示为:log X或者log(X))。
int time (int n)
int count=0, x=2;
while ( x < n/2 )
x=2x;
count++;
return (count);
- O(log n), log(n) B. O(log n/2), log(n) -1 C. O(log n), log(n) -2
- O(log n) , log(n) - 1
每循环一次x值为原来2倍。x原值为2,循环count次后x=(2^count)*2。
当x=n/2,解得count=log(2)n-2。因此时间复杂度为O(log(2)n)。
19. 下列叙述中正确的是
A) 设计算法时只需要考虑结果的可靠性
B) 算法就是程序
C) 设计算法时要考虑时间复杂度和空间复杂度
D) 设计算法时只需要考虑数据结构的设计
答:C
20. 下面关于线性表的叙述中,错误的是哪一个?()
A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
答:B
21. 数据的存储结构通常有。
A.顺序存储结构和链式存储结构
B.顺序存储结构、链式存储结构和索引结构
C.顺序存储结构、链式存储结构和散列结构
D.顺序存储结构、链式存储结构、索引结构和散列结构
答:D
22. 循环队列的存储空间为 Q(1:50),初始状态为 front=rear=50。经过一系列正常的入队与退队操作后,front=rear=25,此后又插入一个元素,则循环队列中的元素个数为
A) 2
B) 1,或50且产生上溢错误
C) 26
D) 51
答:B
开始时候front=rear ,结束了还是front=rear 说明进来的和出去的一样多
23. 在双向链表指针p的结点前插入一个指针q的结点操作是()
A. p->llink=q;q->rlink=p;p->llink->rlink=q;q->llink=q;
B. p->llink=q;p->llink->rlink=q;q->rlink=p;q->rlink=p->rlink;
C. q->rlink=p;q->llink=p->llink;q->llink->rlink=q;p->llink=q;
D. q->llink=p->llink;q->rlink=q;p->llink=q;p->llink=q;
Q=newNode p=current
NewNode->lLink=current->lLink; q->llink=p->llink;
Current->lLink=newNode; p->link=q;
newNode->lLink->rLink=newNode;
newNode->rLink=Current; q->rlink=p
24. 设栈S和队列Q的初始状态均为空,元素a,b,c,d,e, f,g依次进入栈S。若每个元素出栈后立即进入队列Q,且7个元素出队的顺序是b,d,c,f,e,a,g,则栈S的容量至少是。
A.1 B.2 C.3 D.4
答:C
25. 在一个单链表中,若p所指节点不是最后节点,在p之后插入s所指节点,则执行
A. s->link=p; p->link=s;
B. s->link=p->link; p->link=s;
C. s->link=p->link; p=s;
D. p->link=s; s->link=p;
答:B
p后面的节点先要与新插入的s相连,s->next = p->next
然后在将s与p相连
p->next= s
p为current s为newNode
后插入:
newNode->link=Current->link;
Current->link=newNode;
以上是关于算法基础的主要内容,如果未能解决你的问题,请参考以下文章