如何制作通用链表

2023-11-29

我正在尝试在中创建一个通用链表C编程语言和我 成功了,但我有一个小问题:

链接列表.h

 struct Element {
     void * data;
     struct Element * nEl;
 };
 typedef struct Element Element;

 struct List {
     size_t el_size;
     Element * start_el;
 };
 typedef struct List List;

链接列表.c

 List * create_list(size_t el_size);
 void delete_list(List * ls);
 void append(List * ls, void * data);
 void s_append(List * ls, void * data);


 void append(List * ls, void * data) {

     Element * last_el = ls - > start_el;

     if (last_el == NULL)
         ls - > start_el = last_el = malloc(sizeof(Element));
     else {
         while (last_el - > nEl != NULL)
             last_el = last_el - > nEl;

         last_el - > nEl = malloc(sizeof(Element));
         last_el = last_el - > nEl;
     }

     void * cdata = malloc(ls - > el_size);
     memcpy(cdata, data, ls - > el_size);

     last_el - > data = cdata;
     last_el - > nEl = NULL;
 }

这适用于所有类型,例如int, char, float, doubleETC。 但它不与char *因为它复制了前 4 个bytes(取决于实现)string,但不是全部string.


问题是列表中每个元素的大小是固定的(el_size)。并非所有字符串都具有相同的大小,假设每个字符 1 个字节“hola”将占用 4 个字节,而“hi”将占用 2 个字节。

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

如何制作通用链表 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • C# 中带有 Switch 语句的 While 循环

    如果选择超出范围 我会尝试循环切换条件 但我没有得到所需的输出 因此 如果在执行切换条件时用户没有输入 1 3 作为输入 我希望它进入默认条件 该条件应该触发错误语句 然后继续循环 Console WriteLine Which book
  • JavaScript getElementById(...) 为 null 或不是对象 IE

    对于 JavaScript 专家来说 这一定是非常简单的事情 在下面的代码中 我尝试将 iframe 打开到浏览器窗口的整个高度
  • Flasgger / Swagger - apidocs 适用于 localhost,但不适用于 Openshift(您需要启用 JavaScript 才能运行此应用程序)

    我正在运行 Python Flask 服务器 一位同事添加了 Flasgger Swagger 支持 我可以使用以下命令成功显示 API http localhost 5000 apidocs 同样 我可以获得json版本的API http
  • 使用


    换成新行

    我是 css 新手 我的问题是 我想在新行中添加一条水平线 所以我认为这是一个好主意 p hr p 但它却给出了 p p hr p p Why Edit 谢谢您的回答 您说得对 这个问题很神秘 下次我会使用 jsfiddle 更具体 超文本
  • 如何在android中为每个联系人/人发送短信确认?

    我想向多人发送短信并验证短信是否已发送 我检查了多个链接 此处提到 并得到了使用的想法PendingIntent and broadCast Receiver确认 查明短信是否已发送的实用方法 在android中以编程方式发送短信 http
  • Codeigniter 删除...在哪里...以及

    我需要一点帮助 我如何使用 codeigniter 发送此查询 Delete FROM friendconnect WHERE who 5 and whos 1 OR whos 5 and who 1 我只发现 this gt db gt
  • .NET Core 依赖注入实例何时被释放?

    ASP NET Core 使用扩展方法IServiceCollection设置依赖注入 然后当需要类型时 它使用适当的方法创建一个新实例 AddTransient
  • 如何避免我的 makefile 重新链接

    我的 Makefile 正在重新链接 但我找不到原因 我不确定为什么 malloc 假设必须执行 NAME SRC c o 宏是否更改了 o 文件的时间戳或类似内容 CC gcc NAME app CFLAGS Wall Werror We
  • 无法在 Android 11 上以编程方式拍照 - Intent 返回取消状态

    开始一个意图 Intent intent new Intent MediaStore ACTION IMAGE CAPTURE CurrentFile new File getTempFileString CurrentUri FilePr
  • 捕获完整的异常消息

    考虑 Invoke WebRequest sumoApiURL Headers Content Type application json Credential cred WebSession webRequestSession Metho
  • 使用按钮而不是 ui 导航控制器在视图之间切换

    我看过这个帖子iPhone如何通过按钮切换视图 但这并没有回答如何使用按钮在视图之间来回切换 提出问题的人给出的答案是他们可以使用 uinavigationcontroller 在视图之间切换 我将以下代码放入 ibaction 中 当在主
  • Java Jersey 2:独立的?

    是否可以在 Java 应用程序中独立使用 Jersey REST 服务 我找到的每个示例都位于 Web 容器 web xml 的上下文中 感谢帮助 只需按照泽西岛文档入门 它使用 Grizzly 创建一个独立的服务器 使用 Maven 您可
  • 如何获取导入包的路径

    我在尝试获取导入包的路径时遇到困难 当我打印结果时os Getwd 在导入的包内 它显示与上相同的路径main包裹 这就是我所做的 项目结构 库 lib go package lib import os import fmt func in
  • 如何使用 scriptdom API 提取跨数据库引用

    微软已经曝光了scriptdom API解析并生成TSQL 我对它很陌生 并且仍在玩它 我想知道如何从这样的查询中获取跨数据库引用 UPDATE t3 SET description abc FROM database1 dbo table
  • 保存时如何检查字段是否发生变化?

    在我的模型中我有 class Alias MyBaseModel remote image models URLField max length 500 null True help text A URL that is downloade
  • 将条形子弹图转换为柱形图

    这是 highchart 子弹图的示例http jsfiddle net jlbriggs LdHYt 1 我们如何将其转换为柱形子弹图 Highcharts Renderer prototype symbols line function
  • 文本作为 CSS 的背景图像

    我正在尝试使用 Jquery 和 CSS 将字母表中的字母 随机 显示为 div 的背景图像 但是 我希望每个元素的字母是随机的 但我只能同时对所有图像进行随机化 HTML div class randbg div div class ra
  • std::chrono::duration::count 函数的实际结果类型是什么

    实际结果类型是什么std chrono duration count函数类似于以下情况 std chrono duration cast
  • 全局命名空间中的保留名称

    从我的回答中得出C 中的动态对象数组并作为后续行动在 C 标识符中使用下划线的规则是什么 显然 名字开头 后面跟着的大写字母在全局命名空间中保留 17 4 3 2 1 全局名称 lib global names 某些名称和函数签名集始终保留
  • 如何制作通用链表

    我正在尝试在中创建一个通用链表C编程语言和我 成功了 但我有一个小问题 链接列表 h struct Element void data struct Element nEl typedef struct Element Element st