在 C 中查找列表的基数

2024-01-31

我怎样才能只找到列表中出现一次的元素并返回基数?例如,如果我的列表由 {3,2,1,1,2,4} 组成,我期望返回计数器为 4 而不是6 因为我们不计算重复的数字。 这是我到目前为止编写的代码。

struct Node 
{ 
    int data;  
    struct Node *next; 
}; 
  
int Find_cardinal(struct Node *start) 
{ 
    struct Node *ptr1, *ptr2
    ptr1 = start; 
    int counter=0;
    /* Pick elements one by one */
    while (ptr1 != NULL && ptr1->next != NULL) 
    { 
        ptr2 = ptr1; 
  
        /* Compare the picked element with rest 
           of the elements */
        while (ptr2->next != NULL) 
        { 
            /* If duplicate */
            if (ptr1->data == ptr2->next->data) 
            { 
                break;
            } 
            else 
                //do what?
                ptr2 = ptr2->next; 
                
        } 
        ptr1 = ptr1->next; 
    } 
    return counter;
} 

你的函数实现是错误的。

甚至第一个 while 循环中的条件

while (ptr1 != NULL && ptr1->next != NULL)

是不正确的,因为如果列表仅包含一个节点,则不会执行循环并且函数将返回 0。

并在函数内变量counter没有被改变。

这是一个演示程序,展示了该功能如何Find_cardinal最好这样命名count_distinct可以实施。

#include <stdio.h>
#include <stdlib.h>

struct Node 
{ 
    int data; 
    struct Node *next; 
}; 
typedef struct Node Node_t;

size_t assign( Node_t **head, const int a[], size_t n )
{
    while ( *head )
    {
        Node_t *tmp = *head;
        head = &( *head )->next;
        free( tmp );
    }
    
    size_t i = 0;
    
    for ( ; i < n && ( *head = malloc( sizeof( Node_t ) ) ) != NULL; i++ )
    {
        ( *head )->data = a[i];
        ( *head )->next = NULL;
        head = &( *head )->next;
    }
    
    return i;
}

size_t count_distinct( const Node_t *head )
{
    size_t n = 0;
    
    for ( const Node_t *current = head; current != NULL; current = current->next )
    {
        const Node_t *prev = head;
        
        while ( prev != current && prev->data != current->data )
        {
            prev = prev->next;
        }
        
        if ( prev == current ) ++n;
    }
    
    return n;
}

FILE * display( const Node_t *head, FILE *fp )
{
    for ( ; head != NULL; head = head->next )
    {
        fprintf( fp, "%d -> ", head->data );
    }
    
    fputs( "null", fp );
    
    return fp;
}

int main(void) 
{
    Node_t *head = NULL;
    int a[] = { 1, 2, 1, 1, 3, 4 };
    
    assign( &head, a, sizeof( a ) / sizeof( *a ) );
    
    fputc( '\n', display( head, stdout ) );
    
    printf( "There are %zu distinct data in the list.\n", count_distinct( head ) );
    
    return 0;
}

程序输出是

1 -> 2 -> 1 -> 1 -> 3 -> 4 -> null
There are 4 distinct data in the list.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C 中查找列表的基数 的相关文章

  • 金特 + XNA (C#)

    是否可以使用jint http jint codeplex com操作使用 XNA C 创建的 3D 环境 并向该环境添加功能 再次使用 jint 作为 Jint 的贡献者 我会推荐你Jint http jint codeplex com
  • 如何使用 ASP.NET MVC 编辑多选列表?

    我想编辑一个如下所示的对象 我希望用 UsersGrossList 中的一个或多个用户填充 UsersSelectedList 使用 mvc 中的标准编辑视图 我只得到映射的字符串和布尔值 下面未显示 我在 google 上找到的许多示例都
  • c# 从另一个类中的另一个静态事件引发事件

    需要帮助从另一个班级调用事件 我有已声明事件的课程 public class MxPBaseGridView GridView public event AddNewItemsToPopUpMenuEventHandler AddNewIt
  • 锁定 ASP.NET 应用程序变量

    我在 ASP NET 应用程序中使用第三方 Web 服务 对第 3 方 Web 服务的调用必须同步 但 ASP NET 显然是多线程的 并且可能会发出多个页面请求 从而导致对第 3 方 Web 服务的同时调用 对 Web 服务的调用封装在自
  • 并行化斐波那契序列生成器

    我正在学习并行化 在一项练习中 我得到了一些我应该提高性能的算法 其中之一是斐波那契数列生成器 array 0 0 array 1 1 for q 2 q lt MAX q array q array q 1 array q 2 我怀疑 这
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 司机和提供商之间的区别

    数据库中的驱动程序和提供程序有什么区别 有没有解释一下 不胜感激 样本 ADO NET driver for MySQL vs providerName System Data EntityClient 来自 MSDN 论坛 驱动程序是安装
  • 将设置函数(setter)标记为 constexpr 的目的是什么? [复制]

    这个问题在这里已经有答案了 我无法理解将 setter 函数标记为的目的constexpr 自 C 14 起这是允许的 我的误解来自以下情况 我使用 constexpr c tor 声明一个类 并且我将通过创建该类的 constexpr 实
  • C# 处理标准输入

    我目前正在尝试通过命令行断开与网络文件夹的连接 并使用以下代码 System Diagnostics Process process2 new System Diagnostics Process System Diagnostics Pr
  • 全局使用和 .NET Standard 2.0

    我最近意识到我可以使用 C 10 功能文件范围的命名空间在 NET Standard 2 0 项目中也可以通过设置
  • C# 编译器数字文字

    有谁知道 C 编译器数字文字修饰符的完整列表 默认情况下 声明 0 使其成为 Int32 声明 0 0 使其成为 Double 我可以在末尾使用文字修饰符 f 来确保某些内容被视为 Single 例如像这样 var x 0 x is Int
  • 通过 C# Mailkit / Mimekit 发送电子邮件,但出现服务器证书错误

    Visual Studio 2015 中的 0 代码 1 我正在使用 Mailkit 最新版本 1 18 1 1 从我自己的电子邮件服务器发送电子邮件 2 电子邮件服务器具有不受信任的自签名证书 3 我在代码中添加了以下两行 以忽略服务器证
  • 使用 OleDbCommandBuilder 时访问 SQL 语法错误

    我要在 C 中使用 OleDbDataAdapter 在 Access 数据库中插入数据 但收到错误消息INSERT INTO 命令中的语法错误 BackgroundWorker worker new BackgroundWorker Ol
  • EnumDisplayDevices 与 WMI Win32_DesktopMonitor,如何检测活动监视器?

    对于我当前的 C 项目 我需要为在大量计算机上连接并处于活动状态的每个监视器检测一个唯一的字符串 研究指出了两种选择 使用 WMI 并查询 Win32 DesktopMonitor 以获取所有活动监视器 使用 PNPDeviceID 来唯一
  • 为什么 f(i = -1, i = -1) 是未定义的行为?

    我正在读关于违反评估顺序 http en cppreference com w cpp language eval order 他们举了一个令我困惑的例子 1 如果标量对象上的副作用相对于同一标量对象上的另一个副作用是无序的 则行为未定义
  • 如何将 int 作为“void *”传递给线程启动函数?

    我最初有一个用于斐波那契变量数组的全局变量 但发现这是不允许的 我需要进行基本的多线程处理并处理竞争条件 但我无法在 pthread 创建中将 int 作为 void 参数提供 我尝试过使用常量指针 但没有成功 由于某些奇怪的原因 void
  • 将 char 绑定到枚举类型

    我有一段与此非常相似的代码 class someclass public enum Section START MID END vector section Full void ex for int i 0 i section
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad
  • SQL Server“未找到网络路径”在不同环境中随机且不频繁地发生

    类似 如果不是同一个问题 随机遇到网络路径未找到异常 https stackoverflow com questions 38696448 network path not found exception encountered rando
  • 为什么表达式 a = a + b - ( b = a ) 在 C++ 中给出序列点警告?

    以下是测试代码 int main int a 3 int b 4 a a b b a cout lt lt a lt lt a lt lt lt lt b lt lt b lt lt n return 0 编译此命令会出现以下警告 gt g

随机推荐

  • Xcode 机器人在成功/失败时不发送电子邮件

    我设置了 Xcode Bots 它运行成功 但是 尽管设置了电子邮件地址以在构建成功或失败时收到通知 但我没有收到任何电子邮件 是否有任何额外的 SMTP 设置需要隐藏在某处 您可能需要配置 Mac OSX 服务器来发送电子邮件 本地服务器
  • 如何在 Eclipse 中根据变量设置 Ant 属性?

    我有一个常见问题 可能有无数种方法可以解决它 我正在为这种典型场景寻找一种优雅 简单的解决方案 我在 Eclipse 中有一个带有 Ant 构建文件 build xml 的项目 该构建文件使用属性文件 build properties 在该
  • NSRegularExpression 用于剥离 HTML 标签

    我正在开发一个电子书阅读器应用程序 我有整本电子书的 ePUB 文件 其中电子书的每个主题都是一个 html 文件 我想在应用程序中实现搜索功能 我正在使用 NSRegularExpression 类进行搜索 请考虑以下 html 代码
  • 为什么 C#7 语法中的 TryParse(清空参数)在编译时会发出警告?

    在 C 7 中 你可以这样做 if int TryParse 123 out int result Console WriteLine Parsed result 或者 如果您不使用结果而只想检查解析是否成功 discard https l
  • 用于复制的 EBS 卷的快照

    我在 EBS 卷上设置了一个带有 MySQL 的 EC2 实例 并设置了另一个充当复制从属实例 复制设置很好 我的问题是关于拍摄这些卷的快照 我注意到快照过程需要锁定表 这可能会给用户带来不便 因此 我的想法是保留主实例并拍摄作为从实例的快
  • 从队列中获取最后 n 个项目

    我看到的一切都是关于列表的 但这是关于events queue queue 这是一个包含我想要提取的对象的队列 但是我如何从该队列中获取最后 N 个元素 根据定义 你不能 你可以做的是使用循环或理解get the first 你不能get从
  • 为什么body.scrollHeight自动增加而不减少

    我的 iframe body 有一个scrollHeight我认为是只读的属性 我不明白它是如何设置的 当我修改iframe body innerHTML和一些largerHTML 我注意到iframe body scrollHeight
  • 如何用随机字典值填充 pandas 数据框列

    我是 Pandas 新手 我想使用随机文本数据 我正在尝试向 DataFrame df 添加 2 个新列 每个列都由从字典中随机选择的键 newcol1 值 newcol2 填充 countries Africa Ghana Europe
  • TinyMCE中通过execCommand(insertContent)插入元素的参考

    我需要一个我通过 TinyMCE 编辑器插入的元素的参考 ed execCommand mceInsertContent false span class marker my node content span 或者 是否有任何解决方法可以
  • CollapsingToolbarLayout 以编程方式扩展动画持续时间

    我在 Android 的应用程序中使用 CollapsingToolbarLayout 我的应用程序的最低要求 API 是 9 我需要当用户单击折叠的工具栏时展开折叠的工具栏 就像在最新的 Gmail 日历应用程序中一样 所以我设置了一个
  • 多用户数据源 - Spring + Hibernate

    我正在编写一个支持多个用户的网络应用程序 每个用户都有自己的数据库 使用H2 所有数据库模式都是相同的 我希望在这个应用程序中使用 Spring Hibernate 所以我被困在如何将用户的数据库与该用户关联起来 也许在HTTPSessio
  • 可对动态内容进行排序

    所以我使用 jQuery UI 可排序插件对小图库中的照片进行排序 function area sortable items sort wrapper cursor move handle photo handler opacity 0 5
  • django:如何为 SuspiciousOperation 异常创建自定义日志过滤器?

    迁移到 1 11 从 1 8 后 我收到了一些SuspiciousOperation记录错误 它似乎来自 JS 请求 如果用户移动鼠标 它会保持会话活动 但这并不重要 我怎样才能过滤这个异常 我尝试过的 我刚刚在某处创建了一个过滤器 imp
  • 限制变量范围

    我正在尝试编写一个函数 它限制 R 变量的范围 例如 source LimitScope R y 0 f function Raises an error as y is a global variable x y 我想过测试可变环境 但不
  • 我应该如何更新“热门”表?

    我有一个带有 热 表的 postgres 数据库 这意味着它每秒都会收到许多更新 删除 我想运行一个查询UPDATE大约 10 的行 我没有 10 标准的索引 隔离级别设置为SERIALIZABLE作为数据库标志 影响所有事务 我希望这个查
  • Elixir Phoenix 生产服务器出现 Letscrypt 续订问题

    我有一个使用 Elixir Phoenix 框架构建的网站 该网站在开发和生产模式下都运行良好 当phoenix服务器在开发模式下运行时 我更新Let s Encrypt证书没有问题 但是当完全一样应用程序正在生产模式下运行 尝试更新时我不
  • 为什么Java的Area#equals方法不覆盖Object#equals?

    我刚刚遇到了一个由Java引起的问题java awt geom Area equals Area 方法 该问题可以简化为以下单元测试 org junit Test public void testEquals java awt geom A
  • Oracle 中数字的默认精度和小数位数是多少?

    在 Oracle 中创建 NUMBER 类型的列时 您可以选择不指定精度或小数位数 如果您不指定这些默认值 它们会做什么 数字 精度 小数位数 如果未指定精度 则该列将存储给定的值 如果未指定比例 则比例为零 更多信息请访问 http do
  • 检测iframe是否跨域的万无一失的方法

    我正在尝试确定是否有任何 iframe 是跨域的 根据这个问题中接受的答案 检测iframe何时跨域 然后退出它 https stackoverflow com questions 2365822 detect when iframe is
  • 在 C 中查找列表的基数

    我怎样才能只找到列表中出现一次的元素并返回基数 例如 如果我的列表由 3 2 1 1 2 4 组成 我期望返回计数器为 4 而不是6 因为我们不计算重复的数字 这是我到目前为止编写的代码 struct Node int data struc