c++ new一个结构体_基础数据结构的实现

本文介绍了使用C++实现线性表的顺序存储(数组)和链式存储(链表)结构,包括头文件、链表实现及驱动代码。文章强调了良好的命名规范和内存管理,提供了部分代码示例,并提到完整实现已上传至GitHub。
摘要由CSDN通过智能技术生成

前言

啊,终于写完了。

我是指,那9个.c文件以及3个.h文件。

其实,前几天就写完了,只是写完后发现似乎可以再优化一下,于是就在重构代码的路上一去不复返了……

简单说一下,我用顺序储存结构(数组)和链式储存结构(链表)分别实现了线性表、栈以及队列的ADT,文件如下:

├─LinearList
│    ├─driver.c
│    ├─LinearList.h
│    ├─LinearList_Array.c
│    ├─LinearList_Linked.c
│
├─Queue
│    ├─driver.c
│    ├─Queue.h
│    ├─Queue_Array.c
│    ├─Queue_Linked.c
│
└─Stack
     ├─driver.c
     ├─Stack.h
     ├─Stack_Array.c
     ├─Stack_Linked.c

LinearList(线性表)目录下共有四个文件,其中driver.c是驱动代码,用来测试实现的功能。LinearList.hLinearList_Array.cLinearList_Linked.c共用的头文件,用来定义统一的接口,这种接口无关具体的实现,也就是说无论该接口的具体实现是用的数组(LinearList_Array.c)还是用的链表(LinearList_Linked.c),都不影响使用该接口的程序(driver.c)。

如果是线性表或者是栈还好,很容易就统一了,但是队列就很麻烦,因为队列用数组实现的时候并没有指向每一个元素的指针,而用链表实现的时候不仅有链表内部的指针,还有一个包含两个指针的结构体分别指向队头和队尾,而这个指针结构体也是用一个指针来表示的,换句话说就是一个指针指向包含两个指针的结构体,这两个指针又分别指向一个链表的头和尾,而另一边只是一个数组以及两个表示头和尾的整数组成的结构体,所以统一起来很麻烦,也没有专业的老师指导,全靠我自己瞎想,不过好在我花了差不多两天的时间最终还是统一了。

我又有完美强迫症,总想着优化优化再优化,结果就是把一个简单的写来练习的程序硬是重构成了比较标准的ADT接口包……

一开始每种ADT只有两个.c文件(数组实现和链表实现),那两个.c文件重构了好几次然后拆分成四个文件:驱动代码,头文件,数组实现的代码和链表实现的代码,这期间的曲折我就不细说了,总之我一个人坎坎坷坷总算完成了……人生太难了。

这里我就只把线性表的头文件和链表实现的代码以及驱动代码贴出来简单说一下,不可能全部贴出来的,太多了。

头文件

头文件如下:

/*
线性表(Linear List)
对象集:n(n>=0)个元素构成的有序序列 a1, a2, a3 ... an
操作集:线性表 list 属于 list_t ,整数 i 表示元素下标(从0开始),元素 data 属于 item_t ,基本操作有:
    1. list_t CreateList(void)
    2. int GetLength(list_t list)
    3
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值