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

符合我们的预期。

目录
相关文章
|
30天前
|
存储 算法 索引
数据结构与算法:单链表
朋友们大家好,本节来到数据结构与算法的新内容:单链表 在上篇文章中,我们知道顺序表通常需要预分配一个固定大小的内存空间, 通常以二倍的大小进行增容,可能会造成空间的浪费,本篇文章我们介绍的链表可以解决这个问题
|
2月前
|
算法 测试技术 C++
【动态规划】【图论】【C++算法】1575统计所有可行路径
【动态规划】【图论】【C++算法】1575统计所有可行路径
|
2月前
|
人工智能 算法 测试技术
【动态规划】【二分查找】C++算法 466 统计重复个数
【动态规划】【二分查找】C++算法 466 统计重复个数
|
10天前
|
存储 算法
单链表——“数据结构与算法”
单链表——“数据结构与算法”
|
17天前
|
算法 测试技术 C#
【字典树】【KMP】【C++算法】3045统计前后缀下标对 II
【字典树】【KMP】【C++算法】3045统计前后缀下标对 II
|
24天前
|
算法 C语言
【算法与数据结构】 C语言实现单链表队列详解2
【算法与数据结构】 C语言实现单链表队列详解
|
24天前
|
存储 算法 C语言
【算法与数据结构】 C语言实现单链表队列详解1
【算法与数据结构】 C语言实现单链表队列详解
|
2月前
|
人工智能 算法 测试技术
【字符串】【C++算法】828.统计子串中的唯一字符
【字符串】【C++算法】828.统计子串中的唯一字符
|
2月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-4 算法训练 结点选择
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-4 算法训练 结点选择
41 0
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到"hand.txt"文件。