随着逐渐学习,更深入的体会了C是面向过程,C++是面向对象这一说法。下面的代码用类封装了一个顺序存储的线性表,仅供参考,有错误请指教,毕竟新手。

将元素类型定义为别名,可以方便更改。对于顺序表,最基本的操作比如增删改查可以写在一个类里,现在要写数据元素为int 或者char等,可以继承这个类,然后再添加独有的操作,也算是促进代码重用?这样理解不知道对不对

#include <iostream>using namespace std;
#define MAXSIZE 20
#define ADDSIZE 10
typedef int ElemType;class SqList
{
public:bool InitList();//初始化线性表bool DestroyList ();//销毁线性表bool ClearList();//清空线性表.参数什么时候用指针,什么时候用引用bool IsEmpty();//判断线性表是否为空unsigned int GetLength()const;//获得线性表长度ElemType GetElem(unsigned int i)const;//得到某一个元素unsigned int GetMaxLength();//获得线性表最大长度int LocateElem(const ElemType value);//判断一个元素是否在顺序表中ElemType PriorElem(const ElemType value);//获得一个元素前驱ElemType NextElem(const ElemType value);//获得一个元素后继bool ListInsert(int i,const ElemType value);//插入线性表bool ListDelete(unsigned int i);//删除一个元素bool ListEnlarge();
private://数据设为私有,通过函数来访问ElemType *p;unsigned int length;unsigned int maxLength;
};//线性表初始化
bool SqList::InitList()//为什么继承重要
{p=new ElemType[MAXSIZE];if(p==NULL)return false;length=0;maxLength=MAXSIZE;return true;
}//线性表销毁
bool SqList::DestroyList()
{delete []p;p=NULL;//防止野指针的产生return true;
}//清空线性表
bool SqList::ClearList()
{SqList::DestroyList();length=0;return true;
}//判断线性表是否为空
bool SqList::IsEmpty()
{if(length)return true;elsereturn false;
}//线性表当前长度
unsigned int SqList::GetLength()const
{return length;
}//获得第i个元素
ElemType SqList::GetElem(unsigned int i)const//为什么参数不能是unsigned int,不能判断unsigned int>-1;函数应该会在不是所有路径有返回值的情况下自动返回一个值
{if(i<length)return p[i];
}unsigned int SqList::GetMaxLength()
{return maxLength;
}//判断一个元素是否在线性表里,若在返回下标,不在返回-1
int SqList::LocateElem(const ElemType value)
{for(unsigned int i=0;i<length;++i){if(value==p[i])return i;}return -1;
}//获得一个元素前驱
ElemType SqList::PriorElem(const ElemType value)
{int i=LocateElem(value);if(i!=-1&&i!=0)return p[i-1];
}//获得一个元素后继
ElemType SqList::NextElem(const ElemType value)
{int i=LocateElem(value);if(i!=-1&&i!=length-1)return p[i+1];
}//插入元素
bool SqList::ListInsert(int i,ElemType value)//添加万一尺寸不够扩容
{if(length+1>maxLength){ListEnlarge();}else if(i<0)return false;else{for(int j=length-1;j>=i;--j)//不要用unsign int 和int 做判断,判断unsigned int大于一个负数会出错p[j+1]=p[j];}p[i]=value;++length;return true;
}//删除元素
bool SqList::ListDelete(unsigned int i)
{if(i<0||i>length-1)//先判断什么样子不对,只要有一个条件不满足就返回,先判断对,要满足所有条件return false;else{for(unsigned int j=i+1;j<length;++j)p[j-1]=p[j];}--length;return true;
}//扩充线性表
bool SqList::ListEnlarge()//函数内部new的空间不会被回收,但是要保证有指针指向它
{ElemType *newp=new ElemType[maxLength+ADDSIZE];for(unsigned int i=0;i<length;++i){newp[i]=p[i];}if(!DestroyList()){return false;}else{p=newp;maxLength+=ADDSIZE;return true;}return false;
}//合并两格注册表,去除重复项
void SqListMergeWithoutRepeat(SqList &La,SqList Lb)
{for(unsigned int i=0;i<Lb.GetLength();++i){if(-1==La.LocateElem(Lb.GetElem(i)))La.ListInsert(La.GetLength(),Lb.GetElem(i));}
}//将两个按照大小排列的表合并成一个按照大小排列的表
void SqListMergeRemainRepeat(SqList &Lc,const SqList &La,SqList &Lb)
{int a=0,b=0,c=0;for(;a<La.GetLength()&&b<Lb.GetLength();++c){if(La.GetElem(a)<Lb.GetElem(b)){Lc.ListInsert(c,La.GetElem(a));++a;}else{Lc.ListInsert(c,Lb.GetElem(b));++b;}}while (a<La.GetLength()){Lc.ListInsert(c,La.GetElem(a));++a;++c;}while (b<Lb.GetLength()){Lc.ListInsert(c,Lb.GetElem(b));++b;++c;}
}
void main()
{SqList sql,sql2,sql3;sql.InitList();sql2.InitList();sql3.InitList();sql.ListInsert(0,0);sql.ListInsert(1,1);sql.ListInsert(2,4);sql.ListInsert(3,5);sql.ListInsert(4,7);sql.ListInsert(5,9);sql2.ListInsert(0,1);sql2.ListInsert(1,4);sql2.ListInsert(2,6);sql2.ListInsert(3,8);sql2.ListInsert(4,9);sql2.ListInsert(5,11);sql2.ListInsert(6,12);//SqListMerge(sql,sql2);for(int i=0;i<sql.GetLength();++i){ElemType value= sql.GetElem(i);cout<<value<<" ";}cout<<endl;for(int i=0;i<sql2.GetLength();++i){ElemType value= sql2.GetElem(i);cout<<value<<" ";}cout<<endl;SqListMergeRemainRepeat(sql3,sql,sql2);for(int i=0;i<sql3.GetLength();++i){ElemType value= sql3.GetElem(i);cout<<value<<" ";}
}

C++ 线性表顺序存储结构相关推荐

  1. 第三章 线性表---顺序存储结构

    线性表(List):零个或多个数据元素的有限序列. 若将线性表记为(a1, ..., ai-1, ai , ai+1 , ..., an),则表中 ai-1 领先于ai , ai领先于ai+1,称ai ...

  2. 使用Java模拟线性表顺序存储结构

    在数据结构中,线性表分两种结构 顺序结构和链表结构 下面使用Java模拟一下顺序结构 主要难点在顺序结构的插入和删除 import java.util.ArrayList;//线性表顺序存储结构 pu ...

  3. 线性表 :: 顺序存储结构的实现

    线性表 :: 顺序存储结构的实现 说明:本文属于读书笔记.笔者将以讲述的方式表达全片文章.故文中提到的某些字词是非正式术语,只是笔者本人的理解性词语. 线性表简介:想要了解点击此处 目录 顺序存储结构 ...

  4. 线性表定义 线性表顺序存储结构

    写在前面:本文章来自于在学习过程中的总结,供大家参考.因水平有限,博客中难免会有不足,恳请大佬们不吝赐教! 文章目录 线性表的定义 线性表的顺序存储结构 线性表顺序存储结构的优缺点 线性表的基本操作 ...

  5. 线性表顺序存储结构操作算法

    线性表顺序存储结构操作算法 ** 顺序表的初始化 线性表的插入算法 线性表的删除算法 线性表的查找算法** 根据书本的知识线性表顺序存储结构的操作算法其实是我们刚进入数据结构与算法的必修课 其实算法无 ...

  6. 线性表-顺序存储结构

    线性表-顺序存储结构 线性表基本概念: 线性结构的基本特征为: 集合中必存在唯一的一个"第一元素": 集合中必存在唯一的一个 "最后元素" : 除最后元素在外, ...

  7. 数据结构严蔚敏C语言版—线性表顺序存储结构(顺序表)C语言实现相关代码

    数据结构严蔚敏C语言版-线性表顺序存储结构(顺序表)C语言实现相关代码 1.运行环境 2.准备工作 1)项目构建 1>新建一个SeqList项目 2>新建两个文件Sources和Heade ...

  8. 数据结构线性表顺序存储结构和主要算法实现

    (1) 线性表的定义. 零个或多个数据元素的有限序列 序列线性表中有直接后继元素,有且仅有一个直接后继,有且仅有一个直接前驱,数据元素之间的关系是一对一的关系 常用的List操作: Operation ...

  9. 线性表顺序存储结构图书管理

    线性表顺序存储结构图书管理 一开始看书里面的线性表的顺序存储结构,感觉简单,觉得动态链表才能做出一点东西,但是顺序存储不仅于此,也能做出来.顺序结构相比链式结构,内容上有较大差异,各有难点 文章目录 ...

  10. 《数据结构与算法》——线性表顺序存储结构的插入与删除

    什么是线性表? 线性表是最基本.最简单.也是最常用的一种数据结构.线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列. 线性表中数据元素之间的关系是一对 ...

最新文章

  1. 英伟达十年力作:新一代光线追踪显卡 Quadro RTX及核心架构Turing,可支持AI运算...
  2. 昨天下午面了个哥们,也就问了4个问题,但好像他被我虐了
  3. 金审系统与SAP接口
  4. 【 MATLAB 】xlim 、 ylim 、zlim简介
  5. 神策数据杨宁:从三重“新”看金融机构财富管理转型
  6. 将一个项目中已有的文档添加到另一个项目中的方法
  7. linux 进程带宽限制,在Linux中限制网络带宽使用
  8. 用pycharm写python_如何利用pyCharm编写和运行python文件
  9. 设计师必备各类型3D字体图层样式PSD素材
  10. C语言基础之--sizeof()运算符的使用以及注意
  11. mysql-关联查询
  12. 浅学JSON——Json.NET之首次试手
  13. 高级商务办公软件应用【14】
  14. linux机顶盒线刷教程,网络机顶盒刷机教程和详细方法,实现软件任意安装,电视免费看...
  15. 【WPS表格】快捷键合集(更新中)
  16. 系统集成项目管理工程师 笔记(第一章:信息化知识)
  17. JCTF Writeup
  18. 计算机视觉论文-2021-07-20
  19. 电脑出现无法访问您试图使用的功能所在的网络位置怎么办?(清除软件卸载残留)
  20. 图像处理叶片面积matlab,基于Matlab图像处理求植物叶片面积

热门文章

  1. matlab二维图形函数,在MATLAB中,画二维图形的常用函数为( )。
  2. 二十四、Gtk4-GtkExpression
  3. 多模基站信息采集系统
  4. 102412离散数学_谓词逻辑
  5. AD16中敷铜与导线连接的方法
  6. JavaScript图中以编程方式平移和缩放
  7. 我真的要做一辈子的Android程序员吗?,含面试题+答案
  8. Spring Boot+微信公众号开发Demo(源码见文章最低端)
  9. 浠水一中2021年高考成绩查询,黄冈市2018届高考成绩简报!这些孩子太厉害了……...
  10. SAP BASIS常见问题解决