数据结构4 链式存储的线性表

1-1

分数 2

作者 李廷元单位 中国民用航空飞行学院

线性表采用链式存储表示时,所有结点之间的存储单元地址可以连续也可以不连续。

T

F


1-3

分数 2

作者 李廷元单位 中国民用航空飞行学院

顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。

T

F


1-4

分数 2

作者 李廷元单位 中国民用航空飞行学院

在单链表中,要访问某个结点,只要知道该结点的指针即可。因此,单链表是一种随机存取结构。

T

F


1-5

分数 2

作者 DS课程组单位 临沂大学

链式存储的优点是插入、删除元素时不会引起后续元素的移动,缺点是只能顺序访问各元素。

T

F


1-6

分数 2

作者 Martin Ester单位 浙江大学

Given two sorted lists L1 and L2, the fastest algorithm for computing L1⋃L2 has time complexity Θ(NlogN).

给定两个排序列表L1和L2,计算L1⋃L2的最快算法具有时间复杂度Θ(NlogN)。

T

F


1-7

分数 1

作者 李廷元单位 中国民用航空飞行学院

链表的每个结点都恰好有一个指针。

T

F


1-8

分数 1

作者 朱晓龙单位 西安邮电大学

对单链表来说,只有从头结点开始才能访问到表中所有结点。

T

F


2-1

分数 3

作者 严冰单位 浙大城市学院

线性表若采用链式存储结构时,要求内存中可用存储单元的地址()。

A.必须是连续的

B.部分地址必须是连续的

C.一定是不连续的

D.连续或不连续都可以


2-2

分数 3

作者 严冰单位 浙大城市学院

对线性表,在下列情况下应当采用链表表示的是()。

A.经常需要随机地存取元素

B.经常需要进行插入和删除操作

C.表中元素需要占据一片连续的存储空间

D.表中的元素个数不变


2-3

分数 3

作者 严冰单位 浙大城市学院

在单链表中,要删除某一指定结点,必须先找到该结点的()。

A.直接前驱

B.自身位置

C.直接后继

D.直接后继的后继


2-4

分数 4

作者 严冰单位 浙大城市学院

在单链表中,指针p指向元素为x的结点,实现“删除x的后继”的语句是()。

A.p=p->next

B.p->next=p->next->next

C.p->next=p

D.p=p->next->next


2-5

分数 4

作者 严冰单位 浙大城市学院

已知线性表中的元素以值递增有序排列,阅读下列程序,该算法的功能是()。

typedef struct node{
ElemType data;
struct node *next;
}LNode;
void fun4(LNode *h, ElemType min, ElemType max) {
LNode *p=h, *q=NULL;
   while (p!=NULL && p->data<=min ) {
       q=p;  p=p->next;
   }
   while (p!=NULL && p->data<max ) {
       if (p==h) {
           h=p->next;  delete p;  p=h;
   }
       else {
           q->next=p->next;  delete p;  p=q->next;
}
   }
}

A.删除单链表中所有值小于min或大于max的元素

B.将单链表中值大于min的元素删除

C.将单链表中值小于max的元素删除

D.删除单链表中所有值大于min且小于max的元素


2-6

分数 4

作者 严冰单位 浙大城市学院

已知单链表中的元素以值递增有序排列,下列算法删除单链表中所有值相同的元素,同时释放被删结点空间。请将该算法补充完整。

typedef struct node{
ElemType data;
    struct node *next;
}LNode;
void delete_equal(LNode *h){
LNode *p=h, *q;
     if (h==NULL)  return;
    while (p->next!=NULL) {
        q=p->next;
        if (p->data!=q->data)
             p=q;
        else  //相邻两元素值相等,则循环删除后继等值结点
             while (q!=NULL && q->data==p->data) {
             __________________________
             }
    }
}

A.p->next=q->next; delete q;

B.q->next=p->next; delete q; q=p->next;

C.p->next=q->next; delete q; q= p->next;

D.p->next=q->next; delete q; q=p;


2-7

分数 4

作者 孔德桢单位 浙大城市学院

已知有如下C语言代码:

struct node {
    int val;
    struct node *next;
} p[3] = { 4, &p[2], 6, &p[0], 5, &p[1] };

其中值为6的表达式是:

A.p[1].next->val

B.(&p[0])->next->val

C.p[2].val

D.p[2].next->val


2-8

分数 2

作者 杨单位 浙大城市学院

下列哪一项不是普通单向链表设置了表头结点带来的好处。

A.统一了算法的实现,简化了链表操作;

B.表头位置的插入删除更加方便

C.表尾位置的插入删除更加方便

D.统一空表和非空表的处理


2-9

分数 2

作者 李廷元单位 中国民用航空飞行学院

单链表中,要将指针q指向的新结点插入到指针p指向的单链表结点之后,下面的操作序列中____是正确的。

A.q=p->next; p->next=q->next;

B.p->next=q->next; q=p->next;

C.q->next=p->next; p->next=q;

D.p->next=q; q->next=p->next;


2-10

分数 2

作者 高磊单位 西南石油大学

若某线性表中最常用的操作是取第i个元素和找第i个元素的前趋元素,则采用( )存储方式最节省时间。

A.顺序表

B.单链表

C.双链表

D.单循环链表


2-11

分数 1

作者 zhangyong单位 浙大城市学院

对于单链表存储结构,以下说法中错误的是( )

A.一个节点的数据域用于存放线性表的一个数据元素

B.一个节点的指针域用于指向下一个数据元素的节点

C.单链表必须带有头节点

D.单链表中所有节点可以连续也可以不连续存放


4-1

分数 5

作者 李祥单位 湖北经济学院

顺序表 - 地址计算

假设顺序表第 1 个元素的内存地址是 100,每个元素占用 2 字节内存空间,则第 5 个元素的内存地址是

108。


4-2

分数 10

作者 张泳单位 浙大城市学院

下列函数用于将链表中各结点的数据依次输出。

struct student {
   long data;
     struct student *next;
};
void print(struct student *head)
{
   struct student *p ;
   p=head;
   if(head != NULL)
      do {
            printf("%ld\n”, p->data);
            p=p->next;
        } while (p!=NULL);
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您设计一个程序来依次访问无头结点的单循环链表的各结点。以下是程序的示例代码: ```C++ #include <iostream> using namespace std; struct Node { int data; Node *next; }; void traverseCircularLinkedList(Node *head) { if (head == NULL) return; Node *current = head->next; while (current != head) { cout << current->data << " "; current = current->next; } cout << endl; } int main() { // 创建一个单循环链表 Node *head = new Node(); Node *node1 = new Node(); Node *node2 = new Node(); Node *node3 = new Node(); head->next = node1; node1->data = 1; node1->next = node2; node2->data = 2; node2->next = node3; node3->data = 3; node3->next = head; // 遍历链表 traverseCircularLinkedList(head); // 释放内存 delete head; delete node1; delete node2; delete node3; return 0; } ``` 在这个程序中,我们首先定义了一个名为Node的结构体,它包含一个整数数据和一个指向下一个结点的指针。然后我们定义了一个名为traverseCircularLinkedList的函数,它的参数是指向链表头结点的指针。函数中我们定义了一个指向当前结点的指针current,将它初始化为头结点的下一个结点,然后通过循环依次访问链表的每个结点,直到current指向头结点为止。在循环中,我们输出current结点的数据,并将current指向下一个结点。最后我们在main函数中创建了一个包含三个结点的单循环链表,然后调用traverseCircularLinkedList函数遍历链表。最后我们释放了动态分配的内存。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值