这两天在准备《软件工程》期末考试,顺带着整理一下今天复习线性表基本操作的代码。

ps:本人编程水平一般,有问题还望指出,高手请见谅。

main.cpp

/* 内容:建立元素数据类型为CElemType的动态顺序结构线性表,并封装对表的操作函数作者:Dreamer_zz日期:2017/1/9
*/#include<iostream>
#include"CList.cpp"
using namespace std;/* 主函数部分 */
int main()
{//定义两个空表(类型不同)CList <int> C1;CList <float> C2;//表的初始信息cout << "表的初始信息输出测试:" << endl;cout<<"C1和C2的初始容量为:"<<C1.GetLength()<<'\t'<< C2.GetLength()<<endl;cout<<"C1和C2的初始长度为:"<<C2.GetSize()<<'\t'<<C2.GetSize()<<endl;cout << endl;//在表的尾部新增一些元素并显示cout << "表元素添加测试:" << endl;for (int i = 1; i <= 10; i++){C1.AddTail(2 * i);C2.AddTail(i*i+0.1);}cout << "C1所有元素为:\n";C1.ShowValues();cout << "C2所有元素为:\n";C2.ShowValues();cout << endl;//在表的指定位置插入元素cout << "表元素插入测试:"<<endl;C1.InsertAt(5, 11);C2.InsertAt(7, 22.2);cout << "C1所有元素为:\n";C1.ShowValues();cout << "C2所有元素为:\n";C2.ShowValues();cout << endl;//显示表指定位置的值cout << "表元素索引测试:"<<endl;cout<<"C1和C2索引5对应的节点的值分别为:"<<C1.GetAt(5)<<'\t'<<C2.GetAt(5)<<endl;cout << endl;//删除表中指定位置的值cout << "表元素删除测试:" << endl;C1.RemoveAt(3, 2);C2.RemoveAt(4);cout << "C1所有元素为:\n";C1.ShowValues();cout << "C2所有元素为:\n";C2.ShowValues();cout << endl;system("pause");return 0;
}

CList.h

/* 建立类模板 */
template<class CElemType>
class CList
{//常数定义
public:enum{INIT_SIZE = 20, //线性表初始空间长度(元素个数)INCREMENT_SIZE = 10 //新增空间长度(元素个数)};//成员变量
private:CElemType *m_pElem; //线性表顺序结构的基地址int m_nSize; //线形表当前长度(小于等于开辟的空间长度)int m_nLength; //为线性表分配的存储空间长度 //成员函数
public:CList(); //构造函数~CList(); //析构函数int GetSize(); //获取线性表当前长度int GetLength(); //获取线性表分配的存储容量CElemType GetAt(int nIndex); //检索元素void SetAt(int nIndex, CElemType e); //修改元素int InsertAt(int nIndex, CElemType e); //在指定位置插入元素,返回索引号int AddTail(CElemType e); //把元素e加到线性表的尾部int AddHead(CElemType e); //把元素e加到线性表的头部void RemoveAt(int nIndex, int nCounter = 1); //在指定位置删除nCounter个元素void ShowValues(); //显示表中所有元素
};

CList.cpp

#include<iostream>
#include"CList.h"
using namespace std;/* 类模板中成员函数定义 */
//构造函数,用于线性表初始化
template<class CElemType>
CList<CElemType>::CList()
{m_nSize = 0;m_nLength = INIT_SIZE;m_pElem = new CElemType[INIT_SIZE]; //开辟动态存储空间
}//析构函数,用于删除线性表
template<class CElemType>
CList<CElemType>::~CList()
{delete[]m_pElem; //删除动态存储空间
}//获取线性表当前长度
template<class CElemType>
int CList<CElemType>::GetSize()
{return m_nSize;
}//获取线性表分配的存储容量
template<class CElemType>
int CList<CElemType>::GetLength()
{return m_nLength;
}//检索元素
template<class CElemType>
CElemType CList<CElemType>::GetAt(int nIndex)
{return m_pElem[nIndex];
}//修改元素
template<class CElemType>
void CList<CElemType>::SetAt(int nIndex, CElemType e)
{m_pElem[nIndex] = e;
}//把元素e加到线性表的尾部
template<class CElemType>
int CList<CElemType>::AddTail(CElemType e)
{return InsertAt(GetSize(), e);
}//把元素e加到线性表的头部
template<class CElemType>
int CList<CElemType>::AddHead(CElemType e)
{return InsertAt(0, e);
}//在指定位置(nIndex)插入元素e,返回索引号
template <class CElemType>
int CList<CElemType>::InsertAt(int nIndex, CElemType e)
{//索引超出范围if (nIndex > GetSize()){cout << "索引超出范围,未插入任何元素!" << endl;return -1;}//空间已满,此时需要增加空间if (GetSize() == GetLength()){//开辟新空间(增加INCREMENT_SIZE个空间)CElemType *p = new CElemType[GetSize() + INCREMENT_SIZE];//将原地址索引nIndex前的空间复制给新开辟的空间for (int i = 0; i < nIndex; i++){p[i] = m_pElem[i];}//将原地址索引nIndex后的空间复制给新开辟的空间(位置后移)for (int i = nIndex; i < GetSize(); i++){p[i + 1] = m_pElem[i];}delete[]m_pElem; //删除原空间m_nLength += INCREMENT_SIZE; //更新空间长度m_pElem = p; //复制空间(位置经过调整的空间复制给原空间)delete[]p; //释放p的空间}//空间还有剩余,直接插入到相应位置else{//插入点后的元素后移一个位置,插入点前位置不变for (int i = GetSize() - 1; i >= nIndex; i--){m_pElem[i + 1] = m_pElem[i];}}m_pElem[nIndex] = e; //将待插入的元素放到指定位置(nIndex)m_nSize++; //空间长度+1return nIndex;
}//从指定位置删除nCounter个元素
template<class CElemType>
void CList<CElemType>::RemoveAt(int nIndex, int nCounter)
{//索引超出范围或者最后一个元素超出范围if (nIndex > GetSize() - 1 || nIndex + nCounter >= GetSize()){cout << "索引超出范围,未删除任何元素!" << endl;return;}//删除所选中的空间(后面的元素覆盖前面的元素位置)for (int i = nIndex; i <= nIndex + nCounter; i++){m_pElem[i] = m_pElem[i + nCounter];}m_nSize -= nCounter; //线性表空间改变//空间冗余时,删除多元的空间if (GetLength() > INIT_SIZE && GetLength() - GetSize() >= INCREMENT_SIZE){//计算合适的线性表空间大小int N = GetSize() + (GetLength() - GetSize()) % INCREMENT_SIZE;CElemType *p = new CElemType[N];//将原线性表中元素复制给p并删除原空间,再将复制给线性表for (int i = 0; i < GetSize(); i++){p[i] = m_pElem[i];delete[]m_pElem;m_pElem = p;m_nLength = N;}delete[]p; //释放p的空间}}//显示表中所有元素
template<class CElemType>
void CList<CElemType>::ShowValues()
{//表中无元素if (GetSize() == 0){cout << "表中无元素!" << endl;}//表中有元素else{for (int i = 0; i < GetSize(); i++){cout << m_pElem[i] << ' ';if ((i + 1) % 15 == 0 && i != GetSize() - 1) //每10个元素为一行{cout << endl;}}cout << endl;}
}

程序运行结果:

C++实现顺序结构线性表的基本操作相关推荐

  1. 数据结构与算法——线性结构——线性表及其表示

    -"一,线性结构 1.顺序储存结构直接表示 多项式. 1).使用数组来表示多项式.(用数组下标来表示指数,值来表示系数) 可以表示成: 2).使用结构数组来表示.(把系数和指数看成一个二元组 ...

  2. java直线函数_java实现顺序结构线性列表的函数代码

    package com.ncu.list; /** * * 顺序结构线性列表 * * */ public class SquenceList { private int size; // 线性表的长度 ...

  3. 实验一线性表的基本操作实现及其应用(JavaScript实现)

    实验一线性表的基本操作实现及其应用(JavaScript实现) 实验目的 熟练掌握线性表的结构特点, 掌握顺序表的基本操作. 巩固 C++相关的程序设计方法与技术. 学会使用顺序表解决实际问题. 实验 ...

  4. 问题 B: 调整表中元素顺序(线性表)

    问题 B: 调整表中元素顺序(线性表) 时间限制: 1 Sec  内存限制: 2 MB 提交: 28  解决: 11 [提交][状态][讨论版] 题目描述 若一个线性表L采用顺序存储结构存储,其中所有 ...

  5. Java 实现线性运动界面_java 实现顺序结构线性列表

    packagecom.ncu.list;/*** * 顺序结构线性列表 * *@authorliuhao **/ public class SquenceList{private int size; ...

  6. C++数据结构实验---线性表的基本操作

    实验一 线性表的基本操作 1.实验内容与要求 理解线性表的概念 设计一个线性表,分别用顺序存储结构和链式存储结构实现,完成线性表的构造.查找.插入.删除.输出等基本操作. 掌握两种存储结构的优缺点以及 ...

  7. 单链表原地逆转 c语言,链式结构线性表的实现(二)

    链式结构线性表的实现(二) 一.目的: 掌握链表的表示方法,存储结构及其基本操作的实现,灵活使用链表. 二.要求: 修改实验三的程序,完成 (1)实现带头接点的单链表的原地逆转(结果链表仍使用原链表的 ...

  8. 线性表的顺序存储 c语言表达,线性表的基本操作顺序存储(C语言).doc

    线性表的基本操作顺序存储(C语言) #include#include#include#define LIST_INIT_SIZE/*线性表存储空间初始分配量*/#define LISTINCREMEN ...

  9. 实验报告: 线性表的基本操作及应用

    实验报告: 线性表的基本操作及应用 实验内容 基本要求: (1)实现单链表的创建:(2)实现单链表的插入:(3)实现单链表的删除 (4)实现单链表的查找:(5)实现单链表的显示: /*Name:Lin ...

最新文章

  1. matlab图像处理课程设计,基于MATLAB_GUI的数字图像处理程序设计课程设计
  2. 几何画板200个经典课件_项目制学科联动 | 金芬娥首席工作室:灵动“画板”,研修创新,协同进步...
  3. 千兆网线8根线定义图_网线水晶头如何制作及怎么测试?
  4. 雷军这么努力,为什么还是干不过 OV?
  5. 暗月渗透实战靶场-项目八(上)
  6. 遥感原理与应用总结——第二章:遥感平台及运行特点
  7. 什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站…z站?...
  8. 科学研究方法与论文写作-课后习题答案
  9. 通信行业名词解释ID、MD、HW、SW
  10. 第22批符合道路运输车辆卫星定位系统标准 及规范的车载终端
  11. Excel 解决高次方程求解的方法
  12. 纯CSS实现图片百叶窗展示效果
  13. 解决Win 7安装Power Shell报错问题
  14. 使用 GPG 加密和解密文件
  15. sqlserver数据库安全
  16. [转载]JavaMail API简介
  17. 一度智信:拼多多商家参与秒杀活动好处
  18. C语言 #include指令
  19. python 12306登录_python爬虫--模拟12306登录
  20. 校友会小程序开发笔记二十九:小程序启动性能评测与优化(2)

热门文章

  1. 视频号美食账号如何运营,美食账号全面解析:国仁楠哥
  2. Codeforces Round #787 (Div. 3)补题
  3. MySQL——聚合函数和group by分组的使用
  4. 实现JTextField()中文本变化的实时监控
  5. 支付宝支付沙箱环境配置
  6. deepin更新失败_深度操作系统deepin 20更新:深度下载器和浏览器
  7. EC预报相关资料整理分享
  8. 新媒体运营胡耀文教程:策划一个完整活动的6大基本要素
  9. linux运行不存在的命令报错
  10. Chrome Performance常见名词解释(FP, FCP, LCP, DCL, FMP, TTI, TBT, FID, CLS)