TypeScript算法专题 - blog9 - 单链表统计 : 返回指定值在单链表结点中的出现次数

简介: TypeScript算法专题 - blog9 - 单链表统计 : 返回指定值在单链表结点中的出现次数

TypeScript数据结构与算法专题 -
[单链表9] 单链表统计 :
返回指定值在单链表结点中的出现次数


【导读】:本节在前文的基础删为我们的单链表类添加统计某个元素在该链表中出现次数的方法count()

这个功能比较简单,只要对列表的结点从头到尾进行一次遍历,在每到一个结点处比较该结点数据域中的内容与给定内容是否一致。如果一致则以为着该节点数据域中存储的数据匹配成功,表示统计出现次数的计数器加1。

它看起来实现后时这个样子的:

【code-1】

count(x:any):number{
    /**
     * 返回链表中结点的值域存储内容与x内容相同的结点的个数
     * @param x {any} 用于比较的数据
     * @returns counter {number} 被统计对象在链表数据域中出现的次数
     */
    let counter = 0;
    let pointer:Lnode = this.head.next;
    while(pointer){
        if(pointer.data == x){      // 当结点数据域 与 x 内容相匹配时
                counter++;          // 则技术
        };
        pointer = pointer.next;
    };
    return counter;
};

我们来试一试效果吧,给出下面的测试:

【test-1】

import * as slist from "./LinkList/singly_linked_list_02"    // 导入单链表
let a = [1,1,2,4,5,7,5,6]
let list = new slist.LinkList(a);
console.log(list.count(1));

Out[]:

2

好像时符合预期的。不过,我们对上述测试代码略做修改:

【test-2】

import * as slist from "./LinkList/singly_linked_list_02"    // 导入单链表
let a = [1,1,2,4,5,7,5,6,"1"]
let list = new slist.LinkList(a);
console.log(list.count(1));

Out[]:

3

发现结果为3。其原因在于在语句pointer.data == x1:number"1":string认为是相等的。而在很多时候,我们是希望对类型进行严格区别的。为了达到区别的目的,可以,默认使用一个较为严格的比较模式对类型进行比较。实现代码如下:

【code-2】

count(x:any,strict:boolean=true):number{
    /**
     * 返回链表中结点的值域存储内容与x内容相同的结点的个数
     * @param x {any} 用于比较的数据
     * @param strict? {boolean} 是否开启严格模式,如果不开启严格模式在统计时相同的不同类型
     * 可能同时被统计,如数字 1 和字符串 "1"
     * @returns counter {number} 被统计对象在链表数据域中出现的次数
     */
    let counter = 0;
    let pointer:Lnode = this.head.next;
    while(pointer){
        if(pointer.data == x){
            if(!strict){                 // 不严格判断类型模式
                counter++;
            }
            else{                        // 严格判断类型模式
                if(typeof(pointer.data)==typeof(x)){
                    counter++;
                }
            }
        };
        pointer = pointer.next;
    };
    return counter;
};

现在我们再来试试运行的效果:

【test-3】

import * as slist from "./LinkList/singly_linked_list_02"    // 导入单链表模块2
let a = [1,1,2,4,5,7,5,5,"1",3,4,7,7,3,2,4]
let list = new slist.LinkList(a);
console.log(list.count(1,false));     // 不严格校验类型
console.log(list.count(1,true));      // 严格校验类型

Out[]:

3
2

符合我们的预期。

目录
相关文章
|
1月前
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
69 1
|
1月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
31 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
3月前
|
算法 索引
【初阶数据结构篇】单链表算法题进阶
深拷贝应该正好由 n 个全新节点组成,其中每个新节点的值都设为其对应的原节点的值。
26 0
|
3月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
45 0
|
5月前
|
算法 安全 数据库
基于结点电压法的配电网状态估计算法matlab仿真
**摘要** 该程序实现了基于结点电压法的配电网状态估计算法,旨在提升数据的准确性和可靠性。在MATLAB2022a中运行,显示了状态估计过程中的电压和相位估计值,以及误差随迭代变化的图表。算法通过迭代计算雅可比矩阵,结合基尔霍夫定律解决线性方程组,估算网络节点电压。状态估计过程中应用了高斯-牛顿或莱文贝格-马夸尔特法,处理量测数据并考虑约束条件,以提高估计精度。程序结果以图形形式展示电压幅值和角度估计的比较,以及估计误差的演变,体现了算法在处理配电网状态估计问题的有效性。
|
5月前
|
算法 程序员 数据处理
【数据结构与算法】使用单链表实现队列:原理、步骤与应用
【数据结构与算法】使用单链表实现队列:原理、步骤与应用
|
5月前
|
算法 C语言
【数据结构与算法 经典例题】返回单链表的倒数第 k 个节点
【数据结构与算法 经典例题】返回单链表的倒数第 k 个节点
|
5月前
|
算法 C语言
【数据结构与算法 刷题系列】求链表的中间结点
【数据结构与算法 刷题系列】求链表的中间结点
|
5月前
|
存储 算法 C语言
【数据结构与算法】深入理解 单链表
【数据结构与算法】深入理解 单链表
|
30天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
下一篇
无影云桌面