C习题-链表

发布时间 2023-08-18 17:23:36作者: 冲他丫的
1.在一个长度为 n ( n>1 )的单链表上,设有头和尾两个指针,执行()操作与链表的长度有关。
A、删除单链表中的第一个元素
B、删除单链表中的最后一个元素
C、在单链表第一个元素前插入一个新元素
D、在单链表最后一个元素后插入一个新元素
答案:B;需要遍历至最后一个元素的前一个
 
2、NumberList是一个顺序容器,以下代码执行后,NumberList里的元素依次为:
 
List<int> NumberList = new List<int>(){2,4,1,3,5};
for(int i = 0;i<NumberList.Count;++i)
{
    int v = NumberList[i];
    if(v%2 = = 0)
    {
        NumberList.Remove(v);//删除的是元素,而非下标
    }
}

A、2,4,1,3,5

B、2,1,3,5
C、4,1,3,5
D、1,3,5
答案:C;选c,第一次循环删除元素2,因为是顺序容器,容器中后面所有元素需要向前移动一个位置,即{4,1,3,5}。进入第二次循环判断的是i=1位置的元素,并没有对4进行操作,所以4并没有被删除。所以答案选C ...


3、下列叙述中正确的是?
A、线性表是线性结构
B、栈与队列是非线性结构
C、线性链表是非线性结构
D、二叉树是线性结构
答案:A;线性表,栈,队列是线性结构,表示一对一的关系。二叉树是非线性结构,每个结点有两个孩子
 

4、用数组r存储静态链表,结点的next域指向后继,工作指针j指向链中结点,使j沿链移动的操作为()?
A、j=r[j].next
B、 j=j+1
C、 j=j->next
D、j=r[j]->next
答案:A;首先链表的下一个结点应该用next指针访问,排除B;当前结点是r[j],可以排除C;r[j]是当前节点而不是指向当前节点的指针,因此用r[j].next;当结构体中next是结构体指针类型则c/c++访问是需要用结构体类型->next来访问 如果不是指针类型 而是结构体类型就应该用 结构体名.next来访问(.前面是结构体,->前面是结构体指针
 

5、以下几种方式当中,稀疏矩阵压缩的存储方法是:()
A、三元组
B、二维数组
C、散列
D、十字链表
答案:AD;
三元表:将非零元素所在的行、列以及它的值构成一个三元组(i,j,v)。 
十字链表是有向图的另一种链式存储结构。该结构可以看成是将有向图的邻接表逆邻接表结合起来得到的。
 

6、若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
A、顺序表
B、双链表
C、带头结点的双循环链表
D、单循环链表
答案:A;“存取任一指定序号”最好的方法是实现“随机存取”,则可采用顺序表。并且,因为插入和删除操作都是在最后进行的,所以无需大量移动数据元素,
 
7.下列叙述中不正确的是(    )
A、在链表中,如果每个结点有两个指针域,则该链表一定是非线性结构
B、在链表中,如果有两个结点的同一个指针域的值相等,则该链表一定是非线性结构
C、在链表中,如果每个结点有两个指针域,则该链表一定是线性结构
D、在链表中,如果有两个结点的同一个指针域的值相等,则该链表一定是线性结构
答案:ACD;
A选项:在链表中,如果每个结点有两个指针域,则该链表一定是非线性结构,错,类似于传统的双链表,一个指向前一个结点,一个指向后一个结点,这种双链表还是一个线性结构。
B选项:在链表中,如果有两个结点的同一个指针域的值相等,则该链表一定是非线性结构。对,如果有两个结点的同一个指针域的值,那么被指向的这个点,有两个前驱,违背了唯一的特点,所以必须是非线性结构。
C选项:在链表中,如果每个结点有两个指针域,则该链表一定是线性结构,错。例如变种的双链表,一个指向后继结点,一个指向链表中的任意结点。如果指向同一结点的话,就类似B选项,所以这个选项是错的。
D选项:在链表中,如果有两个结点的同一个指针域的值相等,则该链表一定是线性结构,错。一个普通的链表中,不同的结点值可以相等,但是这种链表是线性结果。所以这个选项是错的。

8.线索二叉链表是利用()域存储后继结点的地址。
A、lchild
B、data
C、rchild
D、root
答案:C线索化二叉树 通过其空闲的左右孩子来将这个二叉树进行线索化 其中左孩子指针指向他的前驱节点 他的右孩子指针指向他的后继节点
 
 
9.JDK8之前版本,HashMap的数据结构是怎样的?
A、数组
B、链表
C、数组+链表/红黑树
D、 二叉树
答案:C;