线性表之顺序表

一、头文件:SeqList.h

 //顺序线性表的头文件
#include<iostream> const int MaxSize = ;
//定义顺序表SeqList的模板类
template<class DataType>
class SeqList{
public:
  //顺序表无参构造器(创建一个空的顺序表)
  SeqList(){ length = }
  //顺序表有参构造器(创建一个长度为n的顺序表)
  SeqList(DataType array[], int n);
  //顺序表析构函数
  ~SeqList(){}
  //求顺序表的长度
  int GetLength(){ return length; }
  //顺序表按位查找,返回i位置的元素
  DataType GetElement(int i);
  //顺序表按值查找,返回该元素所在的位置
  int GetLocal(DataType x);
  //顺序表在指定的位置插入指定的元素
  void Insert(int i, DataType x);
  //顺序表删除元素,返回删除的元素
  DataType Delete(int i);
  //输出顺序表中的元素
  void PrintSeqList();
private:
  //一维数组,存放数据元素
  DataType data[MaxSize];
  //顺序表的长度
  int length;
}; //实现顺序表有参构造器
template<class DataType>
SeqList<DataType>::SeqList(DataType array[], int n)
{
  if (n > MaxSize)
  {
    throw "传入的顺序表长度过长";
  }
  //给顺序表的存储元素的数组赋值
  for (int i = ; i < n; i++)
  {
    data[i] = array[i];
  }
  //给顺序表的长度赋值
  length = n;
} //实现顺序表按位查找
template<class DataType>
DataType SeqList<DataType>::GetElement(int i)
{
  //判断是定的位置是否合理
  if (i < || i >length)
  {
    throw "位置有误";
  }
  else
  {
    //返回指定位置的元素
    return data[i - ];
  }
} //实现顺序表按值查找,返回该元素所在的位置
template<class DataType>
int SeqList<DataType>::GetLocal(DataType x)
{
  //遍历顺序表的元素
  for (int i = ; i < length; i++)
  {
    //判断指定的元素是否在顺序表中
    if (data[i] == x)
    {
      //返回指定元素在顺序表中的位置
      return (i + );
    }
  }
  //如果指定的元素不在顺序表中,则返回位置为0
  return ;
} //实现顺序表插入元素
template<class DataType>
void SeqList<DataType>::Insert(int index, DataType x)
{
  //判断插入的位置是否合理
  if (length >= MaxSize)
  {
    throw "顺序表已存放满";
  }
  if (index< || index>length + )
  {
    throw "插入元素的位置有误";
  }
  //如何插入的位置合理,则把顺序表中从最后位置到指定插位置的元素整体向后移动一个位置
  for (int j = length; j >= index; j--)
  {
    data[j] = data[j - ];
  }
  //给插入的位置放入指定的元素
  data[index - ] = x;
  length++;
} //实现顺序表删除指定位置的元素
template<class DataType>
DataType SeqList<DataType>::Delete(int index)
{
  //声明要取出的元素
  DataType x;
  //判断要删除的位置是否合理
  if (index< || index>length)
  {
    throw "删除的位置有误";
  }
  else
  {
    //取出指定位置的元素
    x = data[index-];
    //将指定位置后的元素全部都向前移动一个位置
    for (int i = index; i < length; i++)
    {
      data[i - ] = data[i];
    }
    //删除顺序表中的元素后,其长度减1
    length--;
  }
  return x;
} //顺序输出顺序表中的元素
template<class DataType>
void SeqList<DataType>::PrintSeqList()
{
  if (length < )
  {
    throw "顺序表中没有元素";
  }
  else
  {
    //顺序输出顺序表元素
    for (int i = ; i < length; i++)
    {
       cout << data[i] << " ";
    }
    cout << endl;
  }
}

二、测试线性表之顺序表:TestSeqList.cpp

 #include<iostream>
#include"SeqList.h"
using namespace std;
void show()
{
  cout << "---------------------------------------" << endl;
}
int main()
{
  int array[] = {,,,,,,,,,};
  SeqList<int> seqList = SeqList<int>(array,);
  cout << "顺序表为:" << endl;
  seqList.PrintSeqList();
  show();
  cout << "顺序表的长度为:" << seqList.GetLength()<< endl;
  cout << "第三个位置的元素是:" << seqList.GetElement() << endl;
  cout << "元素3的位置是:" << seqList.GetLocal() << endl;
  show();
  cout << "在第5个位置插入元素22" << endl;
  seqList.Insert(, );
  cout << "顺序表为:" << endl;
  seqList.PrintSeqList();
  cout << "顺序表的长度为:" << seqList.GetLength() << endl;
  show();
  cout << "删除第5个位置的元素" << endl;
  seqList.Delete();
  cout << "顺序表为:" << endl;
  seqList.PrintSeqList();
  cout << "顺序表的长度为:" << seqList.GetLength() << endl;
  show();
  return ;
}

三、运行示例结果

线性表之顺序表C++实现的更多相关文章

  1. C#线性表之顺序表

    线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...

  2. c/c++ 线性表之顺序表

    线性表之顺序表 存储在连续的内存空间,和数组一样. 下面的代码,最开始定义了一个能存8个元素的顺序表,当超过8个元素的时候,会再追加开辟空间(函数:reInit). 实现了以下功能: 函数 功能描述 ...

  3. [C++]线性链表之顺序表<一>

    顺序表中数据元素的存储地址是其序号的线性函数,只要确定了存储顺序表的起始地址(即 基地址),计算任意一个元素的存储地址的时间是相等的,具有这一特点的存储结构称为[随机存储]. 使用的基本数据结构:数组 ...

  4. [C++]线性链表之顺序表<二>

    /*   @content 线性链表之顺序表   @date 2017-3-21 1:06   @author Johnny Zen  */ /* 线性表     顺序表     链式表[带头指针/不 ...

  5. [C++]数据结构:线性表之顺序表

    1 顺序表 ADT + Status InitList(SeqList &L) 初始化顺序表 + void printList(SeqList L) 遍历顺序表 + int ListLengt ...

  6. [数据结构 - 第3章] 线性表之顺序表(C++实现)

    一.类定义 顺序表类的定义如下: #ifndef SEQLIST_H #define SEQLIST_H typedef int ElemType; /* "ElemType类型根据实际情况 ...

  7. 数据结构Java实现02----线性表与顺序表

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. 数据结构Java实现01----线性表与顺序表

    一.线性结构: 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素: (2)第一个数据元素没有前驱数据元素: (3)最后一个数据元素没有 ...

  9. C# 数据结构 线性表(顺序表 链表 IList 数组)

    线性表 线性表是最简单.最基本.最常用的数据结构.数据元素 1 对 1的关系,这种关系是位置关系. 特点 (1)第一个元素和最后一个元素前后是没有数据元素,线性表中剩下的元素是近邻的,前后都有元素. ...

随机推荐

  1. python模块-logging的智商上限

    logging,故名肆意就是正在进行日志,我艹,这个文化底蕴! logging是python内置的日志模块,便于日常程序的日志写入和输出 logging共分为5个日志等级,分别是: debug , i ...

  2. 【解析】解析XML

    一.dom4j import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelp ...

  3. js面向对象编程思想

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  4. CentOS时区GMT修改为CST

    GMT:格林尼标准时间 北京时间=GMT时间+8小时 [root@sa~]# date -R 查看目前服务器的时间标准 [root@sa~]# vi /etc/sysconfig/clock 将ZON ...

  5. 01-Coredump核心转存&&Linux程序地址分析【转】

    转自:http://www.itwendao.com/article/detail/404132.html 目录(?)[-] 一Core Dump核心转存 二Linux程序地址分析 一Core Dum ...

  6. 对于Linux平台下C语言开发中__sync_函数的认识(转)

    reference:http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html#Atomic-Builtins A built-i ...

  7. UBIFS文件系统简介 与 利用mkfs.ubifs和ubinize两个工具制作UBI镜像 (完整理解版本)

    UBI文件系统简介 在linux-2.6.27以前,谈到Flash文件系统,大家很多时候多会想到cramfs.jffs2.yaffs2等文件系统. 它们也都是基于文件系 统+mtd+flash设备的架 ...

  8. aarch64_fc26_url

    http://linux.yz.yamagata-u.ac.jp/pub/linux/fedora-projects/fedora-secondary/releases/26/Everything/a ...

  9. 算法笔试题整理——升级蓄水池 && 字符串数字表达式计算值 && 求旅游完所有景点需要的最少天数 && 宝箱怪

    1. 小米笔试题——升级蓄水池 题目描述: 在米兔生活的二维世界中,建造蓄水池非常简单. 一个蓄水池可以用n个坐标轴上的非负整数表示,代表区间为[0-n]范围内宽度为1的墙壁的高度. 如下图1,黑色部 ...

  10. JDBC核心API

    JDBC核心API在java.sql.*和javax.sql.* 1.Driver接口:表示Java驱动程序接口,具体的数据库厂商要实现其此接口 connect(url.propertis):连接数据 ...