自己编程也挺久的了,然而数据结构这块是很弱的部分,然而这个东西对编程又异常重要,虽然这么久我一直没感受到。所以最近集中学习一下。正好手里有一本大话数据结构,就按照该书的顺序往下学习。

开始学习之前,要了解几个概念,如时间复杂度和空间复杂度,具体概念就不罗列,大家可直接百度。

下面是线性表的定义:零个或多个数据元素的有限序列。

顺序存储:用一段地址连续的存储单元依次存储线性表的数据元素。

也就是这次说的顺序存储,大家自然就会想到数组。Ok,接下来我们就使用C++来封装一个类,实现线性表的一些操作。

一般对数据操作都是增删改查,我们以这几个操作为核心,再扩充几个其他操作,如初始化线性表、线性表是否为空、判断某一元素的位置等操作。其实这里面这些操作主要就是插入与删除,其他的都很好理解。

开发环境:Ubuntu Qt

类的组成:common.h 一些宏定义、数据结构、

SeqList类的头文件与源文件

  1. common.h

namespace seqlist_namespace

{

#define OK 0

#define ERROR 1

#define MAXSIZE 100 /* 存储空间初始分配量 */

typedef int ElemType; /* ElemType类型根据实际情况而定,这里假设为int */

typedef struct

{

ElemType data[MAXSIZE]; /* 数组,存储数据元素 */

int length; /* 线性表当前长度 */

}SqList;

}

2.头文件

class SeqList

{

public:

SeqList();

~SeqList();

public:

int initList(seqlist_namespace::SqList *L);

int isListEmpty(const seqlist_namespace::SqList& L);

int clearList(seqlist_namespace::SqList *L);

int listLength(const seqlist_namespace::SqList& L);

//list existed, return element by position i,

//first element means array cursor is 0

int getElem(const seqlist_namespace::SqList& L, const int i, seqlist_namespace::ElemType *e);

//list existed,search first is e element

int locateElem(const seqlist_namespace::SqList& L, const seqlist_namespace::ElemType e);

//

int listInsert(seqlist_namespace::SqList *L, const int i, const seqlist_namespace::ElemType e);

//

int listDelete(seqlist_namespace::SqList *L, const int i, seqlist_namespace::ElemType *e);

int listTraverse(seqlist_namespace::SqList& L);

};

3. 源文件

int SeqList::listInsert(seqlist_namespace::SqList *L, const int i,

const seqlist_namespace::ElemType e)

{

if(MAXSIZE == L->length)

return ERROR;

if(i < 1 || i > L->length+1)

return ERROR;

if(i <= L->length)

{

for(int j=L->length-1; j>=i-1; j--)

L->data[j+1] = L->data[j];

}

L->data[i-1] = e;

L->length++;

return OK;

}

int SeqList::listDelete(seqlist_namespace::SqList *L, const int i,

seqlist_namespace::ElemType *e)

{

if(0 == L->length)

return ERROR;

if(i < 1 || i > L->length)

return ERROR;

if(i < L->length)

{

for(int j=i-1; j!=L->length-1; j++)

{

L->data[j] = L->data[j+1];

}

}

*e = L->data[i-1];

L->length--;

return OK;

}

当需要修改元素时,传入线性表指针;如果不需要修改则传入线性表引用变量。

简单说下插入和删除。

插入数据时,涉及到数据元素向后移动,所以找到元素最大下标(L.length - 1)的数据,之后将其后移一个位置,以此类推,直到移动完所有元素。之后进行插入操作。

删除数据时,找到要删除元素的下标(i -1),将它后继元素(i-1+1)前移,以此类推。

4. 主函数中测试程序

seqlist_namespace::SqList sqlist;

seqlist_namespace::ElemType element;

SeqList L;

L.initList(&sqlist);

for(int i = 0; i < 5; i++)

L.listInsert(&sqlist, 1, i);

L.listTraverse(sqlist);

int ret = 0;

ret = L.locateElem(sqlist,4);

std::cout << "locate " << ret << std::endl;

ret = L.isListEmpty(sqlist);

std::cout << "isEmpty" << ret << std::endl;

L.getElem(sqlist, ret, &element);

std::cout << "getElement" << element << std::endl;

L.listDelete(&sqlist, 1, &element);

L.listTraverse(sqlist);

效果图:

5. 小结

从实现上讲,主要是插入、删除部分的标准以及线性表的一些状态的判断,如表是否为空、表是否为满、插入数据位置的合理性等。

从重要性讲,它很重要,虽然现在还没感觉出来。

学习贵在坚持和不断总结。

程序中还有很多不足,希望大家不吝指正,需要整个Qt的工程的同志可在公众号后台留言。

欢迎关注公众号: Pou光明

delphi7存储过程传入数组_数据结构线性表之顺序存储 类的封装相关推荐

  1. java实现线性表的案例_数据结构—线性表(LinearList)的原理以及Java实现案例

    线性表:零个或多个数据元素的有限序列.包括数组.链表.栈空间.队列等结构都属于线性表. 本文将介绍Java线性表中的数组.链表的实现逻辑,并附有数组线性表.单链表.静态链表的Java实现源码. 数据结 ...

  2. 数据结构——线性表的顺序存储结构

    目录 定义 线性表的顺序存储的结构代码 所应具备的功能 1.初始化 2.插入新元素 (1)在开头插入新元素 (2)在结尾插入新元素 (3)在任意处插入新元素 2.删除元素 (1)开头删除 (2)尾部删 ...

  3. 数据结构—线性表的顺序存储

    一.线性表 线性表:零个或多个数据元素的有限序列. 首先它是一个序列,也就是说,元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最以后一个元素无后继,其他每个元素都有且一个前驱和后继. 二.线 ...

  4. python顺序表数组_数据结构 | 顺序表

    什么是数据结构? 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成. 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中. 比如:列表.集合与字典等都 ...

  5. html树形结构_数据结构-线性表.md

    数据结构基本概念 相互之间存在一种或多种特定关系的数据元素集合. (ER图:实体关系图) 数据对象中数据元素之间的关系 逻辑结构 1.集合结构 2.线性结构 3.树形结构 4.图形结构 下图:从又到左 ...

  6. mysql 线性表_数据结构-线性表之顺序表

    线性表 (1)逻辑结构和物理结构 物理结构:数据元素在内存中真实的存放次序,有可能是连续存放的,也可能是散落于内存里. 逻辑结构:为了便于描述数据元素之间的关系,我们想象出数据之间应该有某种的对应关系 ...

  7. 数据结构-线性表的顺序存储结构逆置

    1.主要的操作是:对顺序存储的线性表进行逆置操作. 2.空表为0时,或超过100个元素时,不执行程序. 自学c语言,有任何问题,还望大佬们指教. 以下是代码: #include <stdio.h ...

  8. delphi7存储过程传入数组_js数组方法reduce

    JS数组Reduce方法详解 reduce方法将会对数组元素从左到右依次执行reducer函数,然后返回一个累计的值. reduce函数的参数 reduce函数接收两个参数,第一个参数是回调函数red ...

  9. delphi7存储过程传入数组_C++中的指针、数组指针与指针数组、函数指针与指针函数...

    本文从初学者的角度,深入浅出地详解什么是指针.如何使用指针.如何定义指针.如何定义数组指针和函数指针,并给出对应的实例演示:接着,区别了数组指针与指针数组.函数指针与指针函数:最后,对最常混淆的引用传 ...

最新文章

  1. python题目关于企业利润_【每日一练】巧用python实现利润计算
  2. 计算机软件资源包括哪些部分组成,操作系统的计算机系统资源包含哪些
  3. 串口调试助手-打开报错
  4. 大道至简第一章阅读笔记
  5. [网络安全自学篇] 十五.Python攻防之多线程、C段扫描和数据库编程(二)
  6. ice 服务java连接,“先进的互联互通技术”–使用ice联通php和java [part 1 server]
  7. python接口测试_python接口自动化测试框架
  8. 考上985能改变命运吗_2021艺考生:文化课成绩一般,有机会考上985、211吗?
  9. dictionary new一个实例_超全的Python 字典(Dictionary)介绍
  10. python决策树预测模型_「数据挖掘入门系列」数据挖掘模型之分类与预测 - 决策树...
  11. Webform(分页、组合查询)
  12. static在实例Extends、Overload中理解
  13. 安装Windows刷机adb环境手册
  14. python二元一次方程组用鸡兔同笼的思路来写编程_应用二元一次方程组——鸡兔同笼 教学设计...
  15. 用matlab做一个有刻度的网格,MATLAB已知坐标如何画网格图
  16. 微软第四朵智能云:低代码平台Power Platform
  17. HUAWEI nova 青春版发布会现场探秘 堪称圈内大惊喜
  18. 推荐一个小程序ui库Wux Weapp
  19. 排序算法c语言描述---归并排序
  20. Linux中处置挖矿病毒样本演示

热门文章

  1. Python 开发桌面小工具,让代码替我们干重复的工作!
  2. SAP CDS entity 中使用 @readonly 进行访问控制
  3. SAP 电商云 Spartacus UI product 明细页面的路由配置
  4. jMeter 用户自定义变量的存储方式
  5. CSS里的inline-size和逻辑属性
  6. SAP Spartacus LockFocusDirective的单步调试
  7. ABAP程序里设置外部断点,调试时断点怎么也触发不了,该怎么办
  8. SAP Spartacus里的产品主数据显示的数据源
  9. SAP Fiori里Contact Support的按钮渲染逻辑
  10. CRM呼叫中心异步搜索实现的调试截图