几个 C++ 的数据结构类

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

如需转载请与作者联系

几个 C++ 的数据结构类 8 月 17 日更新

作者:郑炜 pro_zw@sina.com.cn

代码下载

声明:使用这些类是使用者的自愿行为,作者对源代码的质量不提供任何形式的保证,如果使用者因使用这些类而造成的任何损失都与作者无关,作者不承担任何责任。

array.h: 安全数组,可自动增长大小(可随机访问,但扩充时效率很低,所以在初始化时尽量选择合适的大小)

linkedlist.h: 普通链表(可随机访问,但随机访问效率很低,是通过循环到指定位置来实现的)

dclinkedlist.h× 双向循环链表(不可随机访问,但可正向、反向循环,且大部分操作比普通链表效率高,推荐使用)

hashtable.h: 哈希表(使用键值标识元素,键值一样的元素即认为是同一元素)

set.h: 集合(从 dclinkedlist 派生,基本一样,只是插入时保证元素不会重复)

stack.h: 堆栈(内部使用 dclinkedlist 成员,所以代码很简单且不会溢出)

binstree.h: 二叉搜索树(元素不会重复)

avltree.h×: AVL 平衡树(元素不会重复)

gentree.h×: 一般树(使用二叉树方法实现的一般树)

DFA.h: 通用自动机(以 hashtable 实现的自动机)

×双向循环链表虽然所占内存比普通链表要大,但大部分操作都要比普通链表效率高,如果不需要随机访问,推荐使用(其实链表的随机访问效率是很低的,如果经常需要随机访问,还是使用安全数组),hashtable.h 由于代码的特殊原因,难以使用双向循环链表(以后再看吧),注意双向循环链表是如何判断到达链表尾的。

×AVL 树的插入函数成本非常高,且该类没有完全实现(例如,删除函数),但 AVL 的搜索效率极高,所以适用于在程序开始前初始化程序中经常要搜索的数据集合,一般应用二叉搜索树已经足够了。

×一般树由于不是线性表,所以很多函数、使用方法都和其它类不太相同(其实二叉搜索树和 AVL 平衡树都可看成线性表,但一般树不是)

所有类均使用模板编写,并不特定于 Windows 平台,所有只要有 C++ 编译程序的操作平台都可使用。

以上代码都是作者照书上改写的,并未经过严格测试,如果在使用过程中发现任何问题、困难、源代码错误或可改进的地方,非常欢迎来信与我讨论。电子邮件地址:pro_zw@sina.com.cn。

作者会根据所发现的问题不断改进各类并增加新的数据结构,使其不断完善。

使用者也可根据需要随意更改各代码,但希望发给本人更改后的结果,这也是希望能够参考各方面的意见而改进各类的代码,并没有其他意思。

参考书目:

《数据结构-C++ 语言描述》 William Ford William Topp 著 清华大学出版社

《计算机程序设计艺术》 DONALD E.KNUTH 著 清华大学出版社

C++编程之自定义日志 ——log4cpp使用详解 C++编程之自定义日志 ——log4cpp使用详解log4cpp简介与安装log4cpp安装log4cpp简单介绍layout布局——日志输出格式log4cpp::BasicLayoutlog4cpp::PatternLayoutappenderlog4cpp::FileAppenderlog4cpp::RollingFileAppenderlog4cpp::OstreamAppenderlog... 阅读详情

相关推荐

C++】使用 yaml-cpp 库操作 YAML

配置文件有利于我们灵活配置工程,解决大量重复劳动,也方便调试。YAML 是一种人可读的数据序列化格式,它使用缩进和特定的符号来表示数据结构。在本文中,我们将详细介绍如何在 C++ 中使用yaml-cpp库来解析和生成 YAML 格式的数据。

coco的专栏 4947

C++数据结构.pdf

C++数据结构 数据结构 C++ 数据结构 C/C++ 数组允许定义可存储相同型数据项的变量,但是结构是 C++ 中另⼀种⽤户⾃定义的可⽤的数据型,它允许您存储不同型的数 据项。 结构⽤于表⽰⼀条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性: Title :标题 Author :作者 Subject :⽬ Book ID :书的 ID 1 #include <iostream> 2 3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ 4 #include<iomanip> 5 #include<cmath> 6 using namespace std; 7 double f(double); 8 double xpoint(double,double); 9 double root(double,double); 10 11 int main(int argc, char** argv) { 12 d

C++链表和的综合应用

老师给我们留的一个作业,要求把链表封装成一个。花了几个小时完成后,现在贴出来。。。list.h //list.h#include "iostream"using namespace std;struct NODE ...{    unsigned long uID;    char strName[16];    NODE *next;};class cList...{publi

hizxc的专栏 8685

C++几种常见的数据结构

由于vector是顺序存储结构,所以如果发生了扩容,需要重新申请一块更大的连续内存空间,并将原数据复制过去,所以存储地址有可能发生变化。顺序表相邻(逻辑地址相邻)的两个节点,在内存中具有相邻的物理地址。线性表存储的数据是依次排列的,具有一对一的相连方式。链表相邻(逻辑地址相邻)的两个节点,在内存中的物理地址不一定相同。的对应关系的数据存储结构。如下图所示是我们比较常用的二叉树结构,二叉树具有1对2的对应关系。栈和队列是特殊的线性表,因为他们对数据的进出顺序做出了明确的要求。的对应关系的数据存储结构。...

ymhdt的博客 9761

C++常见数据结构图文详解

文章目录声明一、数组静态数组动态数组:C++中有两个,分别是vector和dequevectorpriority_queuedequestackqueue单向链表forward_list双向链表树setmultisetmapmultimap映射 声明 本文转自https://www.cnblogs.com/woxinfeixiang2015/p/10373674.html 程序 = 数据结构 + 算法 一、数组 静态数组 运行期间无法改变数组大小,由编译期间确定,C++中array即此 int mai

罗伯特祥的博客 4541

C++ 结构

C++中有一种数据型称为结构型,它允许用户自己定义一种数据结构,并且把描述该的各种数据型整合到其中。 一、结构型的基本使用 #include "stdafx.h" #include "iostream"; using namespace std; struct student { int idNumber; char name[10]; int age; float gpa...

酷小川的博客 3707

C++数据结构

(参考严蔚敏的数据结构数据结构主要包含表、栈和队列、串、数组和广义表、树和二叉树以及图等结构。

qq_39562273的博客 2895

几个 C++数据结构(下载)

如需转载请与作者联系 几个 C++数据结构 8 月 17 日更新 作者:郑炜 pro_zw@sina.com.cn 代码下载 声明:使用这些是使用者的自愿行为,作者对源代码的质量不提供任何形式的保证,如果使用者因使用这些而造成的任何损失都与作者无关,作者不承担任何责任。 array.h: 安全数组,可自动增长大小(可随机访问,但扩充时效率很低,所以在初始化时尽量选择合

ccckobe的专栏 1038

C++中的 .h 和 .cpp 详解

通俗解释:.h和.cpp差不多就像书和目录的关系吧,目录中对书中的章节和内容进行简单表示,真正的实现是在书里面的。 一般的数据,数据结构,接口,还有的定义放在.h文件中,可以叫他们头文件,可以#include 到别的文件中。功能实现一般都放在具体的.cpp文件中,这样方便文件管理,节约时间,提高效率。 你完全可以把功能实现一并放在.h文件中,也可以#include一个.cpp文件到另一个源文件中...

a063225的博客 2万+

c++】cpp的继承

c++的继承

hutaotaotao的博客 2282

Cpp入门基础

定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中 即为命名空间的成员。命名空间中可以定义变量/函数/型等。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下 ⾯的rand不在冲突了。C++中域有函数局部域,全局域,命名空间域,域;域影响的是编译时语法查找⼀个变量/函数/ 型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。

2401_86658278的博客 3620

数据结构C++模板实现)-c++

C++doxygenPDFWindows/Linux/Mac c++ c++ c++ c++ c++

几个常用的数据结构

几个常用的数据结构封装,Vector List HashSet HashMap Queue

c++】cpp和对象

c++和对象基本用法

hutaotaotao的博客 1253

C++学了这么多年,你也许不知道为什么定义要放在.h文件,实现放在cpp文件。它们如何关联?

我刚接触VC,请问为什么include头文件有的放在.h中,有的放在.cpp中,还有的要专门放在stdafx.h中,该根据什么原则决定? 一个简单的原则:项目中所有文件都要用到的头文件放在stdafx.h中,仅在某个.cpp文件中用到的头文件放在.cpp文件中,.h文件中要用到的型定义、定义的头文件放在.h文件中 这个好像说不太清,根据我的经验,放在"A.h"中"B.h"的一般是因为A

qq_31209383的博客 4142

【Cpp】和对象

的认识,和对象(一)

石墨博客 1150

【Cpp】C++(class)学习总结

C++中使用关键字 class 来定义, 其基本形式如下: class 名 { public: //行为或属性 protected: //行为或属性 private: //行为或属性 }; 示例: 定义一个点(Point), 具有以下属性和方法: ■ 属性: x坐标, y坐标 ■ 方法: 1.设置x,y的坐标值; 2.输出坐标的信息。 代码实现: class Point { public: void setPoint(int x, int y); void printP

SSA_ming的博客 5821

探索json2cpp:将JSON文件编译为C++常量数据结构的利器

探索json2cpp:将JSON文件编译为C++常量数据结构的利器 项目介绍 在现代软件开发中,JSON作为一种轻量级的数据交换格式,广泛应用于配置文件、API响应等场景。然而,在C++项目中直接使用JSON文件通常需要运行时解析,这不仅增加了运行时开销,还可能带来潜在的安全风险。为了解决这一问题,json2cpp应运而生。json2cpp是一个开源项目,它能够将JSON文件编译为C++的stat...

gitblog_00003的博客 1034
上一篇: 说文解字之C++中的链表的控制
下一篇: 高质量C++/C编程指南
axe8
博客等级 码龄24年 2粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值