41day---C++面试题

1.循环队列是队列的一种顺序存储结构
相关知识点:
数据结构=逻辑结构(线性、非线性)+存储结构(顺序、链式、索引、散列)

  1.     逻辑结构:数据元素间抽象化的相互关系
    
  2.     存储结构:(物理结构),在计算机存储器中的存储形式
    

2.需要频繁的插入删除操作使用链表结构比较合适
相关知识点:
数组是连续地址的,插入和删除都需要移动大量元素,不适合插入删除操作
队列适合一端插入另一端删除的情况
链表适合插入和删除,不需要移动元素
栈适合在同一端插入和删除的操作
3.设栈的初始状态为空,当字符序列a3_作为栈的输入时,输出长度为3的且可以用作C语言标识符的字符串序列有3个
解:
字符序列为a3_ 1)a入栈,再出栈,然后3入栈,再出栈,—入栈,再出栈 序列是a3_
2)a入栈,再出栈,然后3,—入栈,再出栈,序列是a_3
3)a入栈,3入栈,再出栈,a出栈, —入栈,再出栈 序列是3a_
4) a入栈,3入栈,再出栈, —入栈,序列是3_a
5) a入栈,3入栈,_入栈,序列是_3a
C语言的标识符不能以数字开头,去除3a_和3_a 答案为3
4.以下与数据的存储结构无关的术语是
A 循环队列
B 链表
C 哈希表
D 栈
相关知识点:
存储结构是数据的逻辑结构用计算机语言的实现,常见的存储结构有: 顺序存储 , 链式存储 , 索引存储 ,以及 散列存储 。
其中散列所形成的存储结构叫 散列表(又叫哈希表) ,因此哈希表也是一种存储结构。
栈只是一种抽象数据类型,是一种逻辑结构,栈逻辑结构对应的顺序存储结构为顺序栈,对应的链式存储结构为链栈
循环队列是顺序存储结构
链表是线性表的链式存储结构
5.一个栈的输入序列为连续整数1,2,3…n,若输出序列的第一个元素是n,输出第 i(1<=i<=n)个元素是 n-i+1
解:
按照进栈的顺序,先进后出,只有所有的元素进入栈内,n才会是第一个出来,所以第二个出来的是n-1,第i个出来的是n-i+1
6.用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时队头、队尾指针都可能要修改
解:
多于一个元素时,只需要修改对头指针就行了,head->next;但当只有一个元素时,head==rear,此时出队的话,队列就会变成空,需要同时修改对头和队尾指针,不然会超出边界。
7.堆栈溢出一般是由什么原因导致的
A 函数代码长度过长
B 循环的递归调用
C 大数据结构的局部变量
D 代码运行时错误
相关知识点:
1 )代码存储在程序区,与栈没有关系。
2 )递归涉及到压栈入栈。
3 )局部变量存在栈区。
4 )栈的大小是固定的。
8.设栈的存储空间为 S(1:50) ,初始状态为 top=51 。现经过一系列正常的入栈与退栈操作后, top=50 ,则栈中的元素个数为 1
解:栈的顺序存储空间为S(1: 50),初始状态top=51,所以这个栈是50在栈底,1是开口向上的。经过一系列入栈、出栈之后,Top=50。那么此时栈中元素=51-50=1
9.需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构是 静态链表
相关知识点:
静态链表:定义一个较大的结构数组作为备用结点空间(即存储池)。当申请结点时,每个结点应含有两个域:data域和cur域。data域用来存放结点的数据信息,需注意的是,此时的cur域不再是指针而是游标指示器,游标指示器指示其后继结点在结构数组中的相对位置(即数组下标)。
10.若采用带头、尾指针的单向链表表示一个栈,将表头项设置为top
解:
出栈入栈都是针对栈顶元素进行的操作,考虑到这个链表是单项的(从前往后不能从后往前),所以把头指针设成top,这样出栈入栈就是对表头操作,时间上快很多。
11.判断一个单向链表中是否存在环的最佳方法是 快慢指针

你可能感兴趣的:(c/c++面试习题总结,链表,指针,队列,数据结构,栈)