<数据结构> 链表 - 小练习

这篇具有很好参考价值的文章主要介绍了<数据结构> 链表 - 小练习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

A.选择题

 1.链表的适用场合

线性表在 ▁▁▁▁ 情况下适合采用链式存储结构。

A.线性表中数据元素的值需经常修改
B.线性表需经常插入或删除数据元素
C.线性表包含大量的数据元素
D.线性表的数据元素包含大量的数据项

2.链表 - 存储结构

链表要求内存中可用存储单元的地址 ▁▁▁▁▁ 。
A.必须是连续的
B.部分地址必须是连续的
C.一定是不连续的
D.连续或不连续都可以

3.

对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是▁▁▁▁▁。

A. head == NULL
B. head→next == NULL
C. head→next == head
D. head != NULL

4.设有如下定义的链表,则值为7的表达式是▁▁▁▁▁。
struct st
{
     int n;
     struct st *next;
} a[3] = {5, &a[1], 7, &a[2], 9, NULL}, *p = &a;

A. p->n
B. (p->n)++
C. ++p->n
D. p->next->n

5.

在一个单链表head中,若要在指针p所指结点后插入一个q指针所指结点,则执行▁▁▁▁▁。
A. p->next=q->next; q->next=p;
B. q->next=p->next; p=q;
C. p->next=q->next; p->next=q;
D. q->next=p->next; p->next=q;

6.

在一个单链表head中,若要删除指针p所指结点的后继结点,则执行()。
A. p=p->next;free§;
B. p->next=p->next->next; free§;
C. q= p->next q->next=p->next; free(q);
D. q=p->next; p->next=q->next; free(q);

7.

已创建如下的单向链表结构,指针变量s指向链表的第一个结点。以下程序段实现的功能是( )
<数据结构> 链表 - 小练习

p=s->next;
s->next=s->next->next;
free(p);

A.首结点成为尾结点
B.删除首节点的后继节点
C.删除首结点
D.删除尾结点

A.答案

1.B
解释:链式存储适合频繁的删除,插入元素;顺序则更适合频繁的查询。数据元素的多少跟链式存储还是顺序存储关系不大

2.D
解释:链表中的结点是动态开辟出来的,跟连不连续没关系,可能会动态开辟连续的两块内存空间,但是大概率还是不连续的,因此连续或不连续都可以

3.B
解释:链表为空的条件:head头结点的next为空

4.D
解释:a是个结构体数组,存了三组数据;结构体指针p指向a首元素的地址。
对于A:p->n 即为a[0]->n = 5
对于B:(p->n)++ 即为 5++ 结果是 6
对于C: ->(成员选择(指针))优先级最高,跟B没差别
对于D:p->next为a中第二个结构体{7,&a[2]},p->next->n即为7

5.D
解释:
<数据结构> 链表 - 小练习
如果先修改p->next 使其 = q ,那么接下来无法找到原来p->next指向的结点。
抛开这道题,插入结点也可以这样:

struct ListNode* next = p->next;
p->next = q;
q->next = next;

6.D
解释:
<数据结构> 链表 - 小练习
7.B
解释:
<数据结构> 链表 - 小练习

B、函数题

1. 求单链表的表长

给链表的头节点指针head,求这个单链表的表长

(其中ListNode结构定义如下:)

typedef int DataType;
typedef struct ListNode
{
    DataType data;
    struct ListNode *next;
}ListNode;

函数接口定义:

int Length ( ListNode* head );

思路:
<数据结构> 链表 - 小练习

函数实现:

int Length ( ListNode* head )
{
    int len = 0;
    ListNode* cur = L;
    while(cur->next)
    {
        cur = cur->next;
        n++;
    }
    return n;
}

2 求单链表元素序号

给链表的头节点指针 head,和要查找的元素值x。如果x在单链表中存在,函数Locate返回其序号(序号从1开始);否则,返回0。

(其中ListNode结构定义如下:)

typedef int DataType;
typedef struct ListNode
{
    DataType data;
    struct ListNode *next;
}ListNode;

函数接口定义:

int Locate ( ListNode* head, DataType x);

思路:
<数据结构> 链表 - 小练习

函数实现:文章来源地址https://www.toymoban.com/news/detail-401549.html

int Locate ( ListNode* head, DataType x)
{
    int n = 1;//因为序号从1开始,不是从0
    ListNode* cur = head->next;//head是哨兵位结点,数据域没有存有效数据
    while(cur)
    {
        if(cur->data == x)
            return n;
        n++;
        cur = cur->next;
    }
    return 0;//找不到最后返回0
}

3. 求单链表结点的阶乘和

给链表的首元素指针head,求这个单链表结点的阶乘和
(这里默认所有结点的值非负,且题目保证结果在int范围内。)

(其中ListNode结构定义如下:)

typedef struct ListNode
{
    ElemType data;
    struct ListNode *next;
}ListNode;

函数接口定义:

int FactorialSum( ListNode* head );

思路:

遍历一遍链表,把各结点的data的阶乘求和

函数实现:

//把求阶乘封装成一个函数,方便后面使用
int factorial(int data)
{
    if (data == 0)
        return 1;
    else
    {
        int ret = data;
        while (--data)
        {
            ret *= data;
        }
        return ret;
    }
}

int FactorialSum( ListNode* head );
{
    if(head == NULL)
        return 0;
    int ret = 0;
    ListNode* cur = head;
    while(cur)
    {
        ret += factorial(cur->data);
        cur = cur->next;
    }
    return ret;
}

4. 逆序数据建立链表

按输入数据的逆序建立一个链表;

函数createlist利用scanf从输入中获取一系列正整数,当读到−1时表示输入结束。按输入数据的逆序建立一个链表,并返回链表头指针。

(其中ListNode结构定义如下:)

typedef struct ListNode
{
    ElemType data;
    struct ListNode *next;
}ListNode;

函数接口定义:

ListNode* createlist();

思路:

类似于栈Last InFirst Out ,可以考虑头插(在链表的头插入新结点,从而实现逆序)

函数实现:

//把求阶乘封装成一个函数,方便后面使用
int factorial(int data)
{
    if (data == 0)
        return 1;
    else
    {
        int ret = data;
        while (--data)
        {
            ret *= data;
        }
        return ret;
    }
}

int FactorialSum( ListNode* head );
{
    if(head == NULL)
        return 0;
    int ret = 0;
    ListNode* cur = head;
    while(cur)
    {
        ret += factorial(cur->data);
        cur = cur->next;
    }
    return ret;
}

到了这里,关于<数据结构> 链表 - 小练习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 数据结构:链表基础OJ练习+带头双向循环链表的实现

    数据结构:链表基础OJ练习+带头双向循环链表的实现

    目录 一.leetcode剑指 Offer II 027. 回文链表 1.问题描述 2.问题分析与求解 (1) 快慢指针法定位链表的中间节点 (2) 将链表后半部分进行反转 附:递归法反转链表 (3) 双指针法判断链表是否回文 二.带头双向循环链表的实现 1.头文件 2.节点内存申请接口和链表初始化接口 3.链表的打

    2024年02月02日
    浏览(16)
  • 第14章_集合与数据结构拓展练习(前序、中序、后序遍历,线性结构,单向链表构建,单向链表及其反转,字符串压缩)

    第14章_集合与数据结构拓展练习(前序、中序、后序遍历,线性结构,单向链表构建,单向链表及其反转,字符串压缩)

    1、前序、中序、后序遍历 分析: 完全二叉树: 叶结点只能出现在最底层的两层,且最底层叶结点均处于次底层叶结点的左侧 2、线性结构 3、其它 4、单向链表构建 (1)定义一个单向链表SingleLinked类 包含私有的静态内部类Node 包含Object类型的data属性和Node类型的next属性 包含

    2024年01月23日
    浏览(10)
  • 数据结构:带环单链表基础OJ练习笔记(leetcode142. 环形链表 II)(leetcode三题大串烧)

    数据结构:带环单链表基础OJ练习笔记(leetcode142. 环形链表 II)(leetcode三题大串烧)

    目录 一.前言  二.leetcode160. 相交链表  1.问题描述 2.问题分析与求解 三.leetcode141. 环形链表 1.问题描述 2.代码思路  3.证明分析  下一题会用到的重要小结论: 四.leetcode142. 环形链表 II 1.问题描述 2.问题分析与求解 Judgecycle接口: 方法一: 方法二:  单链表和带环单链表

    2023年04月08日
    浏览(12)
  • 数据结构上机练习——单链表的基本操作、头文件、类定义、main函数、多种链表算法的实现,含注释

    数据结构上机练习——单链表的基本操作、头文件、类定义、main函数、多种链表算法的实现,含注释

      头文件和源文件分开有很多好处:可以提高编译速度、提高代码的可维护性、提高代码的可重用性和可扩展性,同时也可以使代码结构更清晰,方便代码的管理和维护。 LinkList.h test.cpp                  (下面所有函数都默认在类中实现)   我们以

    2024年02月07日
    浏览(39)
  • 数据结构-链表结构-双向链表

    数据结构-链表结构-双向链表

    双向链表也叫双链表,与单向链表不同的是,每一个节点有三个区域组成:两个指针域,一个数据域 前一个指针域:存储前驱节点的内存地址 后一个指针域:存储后继节点的内存地址 数据域:存储节点数据 以下就是双向链表的最基本单位 节点的前指针域指向前驱,后指针

    2024年02月04日
    浏览(15)
  • <数据结构> 链表 - 链表的概念及结构

    <数据结构> 链表 - 链表的概念及结构

    概念: 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的 逻辑顺序 是通过链表中的 指针链接 次序实现的 1、链表由一系列结点(链表中每一个元素称为结点)组成。 2、结点可以在运行时动态(malloc)生成。 3、每个结点包括两个部分:一个是存储数据元素的

    2023年04月09日
    浏览(15)
  • 【数据结构-链表-01】反转链表

    【数据结构-链表-01】反转链表

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月10日
    浏览(11)
  • 数据结构——线性数据结构(数组,链表,栈,队列)

    数据结构——线性数据结构(数组,链表,栈,队列)

    数组(Array) 是一种很常见的数据结构。它由相同类型的元素(element)组成,并且是使用一块连续的内存来存储。 我们直接可以利用元素的索引(index)可以计算出该元素对应的存储地址。 数组的特点是: 提供随机访问 并且容量有限。 2.1. 链表简介 链表(LinkedList) 虽然是

    2024年02月11日
    浏览(12)
  • 【数据结构】详解链表结构

    【数据结构】详解链表结构

    上篇博客已经介绍了顺序表的实现:【数据结构】详解顺序表。最后在里面也谈及了顺序表结构的缺陷,即 效率低,空间浪费 等等问题,那么为了解决这些问题,于是乎我们引入了链表的概念,下面将对链表结构进行讲解 首先肯定会问,到底什么是链表? 链表的概念 : 链

    2024年02月05日
    浏览(14)
  • 【数据结构】链表的回文结构

    【数据结构】链表的回文结构

    单链表的操作算法是笔试面试中较为常见的题目。 本文将着重介绍平时面试中常见的关于链表的应用题目,马上要进行秋招了。希望对你们有帮助 _ 😀 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针

    2024年02月12日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包