线性表之顺序表

一、头文件:SeqList.h

  1. //顺序线性表的头文件
  2. #include<iostream>
  3.  
  4. const int MaxSize = ;
  5. //定义顺序表SeqList的模板类
  6. template<class DataType>
  7. class SeqList{
  8. public:
  9.   //顺序表无参构造器(创建一个空的顺序表)
  10.   SeqList(){ length = }
  11.   //顺序表有参构造器(创建一个长度为n的顺序表)
  12.   SeqList(DataType array[], int n);
  13.   //顺序表析构函数
  14.   ~SeqList(){}
  15.   //求顺序表的长度
  16.   int GetLength(){ return length; }
  17.   //顺序表按位查找,返回i位置的元素
  18.   DataType GetElement(int i);
  19.   //顺序表按值查找,返回该元素所在的位置
  20.   int GetLocal(DataType x);
  21.   //顺序表在指定的位置插入指定的元素
  22.   void Insert(int i, DataType x);
  23.   //顺序表删除元素,返回删除的元素
  24.   DataType Delete(int i);
  25.   //输出顺序表中的元素
  26.   void PrintSeqList();
  27. private:
  28.   //一维数组,存放数据元素
  29.   DataType data[MaxSize];
  30.   //顺序表的长度
  31.   int length;
  32. };
  33.  
  34. //实现顺序表有参构造器
  35. template<class DataType>
  36. SeqList<DataType>::SeqList(DataType array[], int n)
  37. {
  38.   if (n > MaxSize)
  39.   {
  40.     throw "传入的顺序表长度过长";
  41.   }
  42.   //给顺序表的存储元素的数组赋值
  43.   for (int i = ; i < n; i++)
  44.   {
  45.     data[i] = array[i];
  46.   }
  47.   //给顺序表的长度赋值
  48.   length = n;
  49. }
  50.  
  51. //实现顺序表按位查找
  52. template<class DataType>
  53. DataType SeqList<DataType>::GetElement(int i)
  54. {
  55.   //判断是定的位置是否合理
  56.   if (i < || i >length)
  57.   {
  58.     throw "位置有误";
  59.   }
  60.   else
  61.   {
  62.     //返回指定位置的元素
  63.     return data[i - ];
  64.   }
  65. }
  66.  
  67. //实现顺序表按值查找,返回该元素所在的位置
  68. template<class DataType>
  69. int SeqList<DataType>::GetLocal(DataType x)
  70. {
  71.   //遍历顺序表的元素
  72.   for (int i = ; i < length; i++)
  73.   {
  74.     //判断指定的元素是否在顺序表中
  75.     if (data[i] == x)
  76.     {
  77.       //返回指定元素在顺序表中的位置
  78.       return (i + );
  79.     }
  80.   }
  81.   //如果指定的元素不在顺序表中,则返回位置为0
  82.   return ;
  83. }
  84.  
  85. //实现顺序表插入元素
  86. template<class DataType>
  87. void SeqList<DataType>::Insert(int index, DataType x)
  88. {
  89.   //判断插入的位置是否合理
  90.   if (length >= MaxSize)
  91.   {
  92.     throw "顺序表已存放满";
  93.   }
  94.   if (index< || index>length + )
  95.   {
  96.     throw "插入元素的位置有误";
  97.   }
  98.   //如何插入的位置合理,则把顺序表中从最后位置到指定插位置的元素整体向后移动一个位置
  99.   for (int j = length; j >= index; j--)
  100.   {
  101.     data[j] = data[j - ];
  102.   }
  103.   //给插入的位置放入指定的元素
  104.   data[index - ] = x;
  105.   length++;
  106. }
  107.  
  108. //实现顺序表删除指定位置的元素
  109. template<class DataType>
  110. DataType SeqList<DataType>::Delete(int index)
  111. {
  112.   //声明要取出的元素
  113.   DataType x;
  114.   //判断要删除的位置是否合理
  115.   if (index< || index>length)
  116.   {
  117.     throw "删除的位置有误";
  118.   }
  119.   else
  120.   {
  121.     //取出指定位置的元素
  122.     x = data[index-];
  123.     //将指定位置后的元素全部都向前移动一个位置
  124.     for (int i = index; i < length; i++)
  125.     {
  126.       data[i - ] = data[i];
  127.     }
  128.     //删除顺序表中的元素后,其长度减1
  129.     length--;
  130.   }
  131.   return x;
  132. }
  133.  
  134. //顺序输出顺序表中的元素
  135. template<class DataType>
  136. void SeqList<DataType>::PrintSeqList()
  137. {
  138.   if (length < )
  139.   {
  140.     throw "顺序表中没有元素";
  141.   }
  142.   else
  143.   {
  144.     //顺序输出顺序表元素
  145.     for (int i = ; i < length; i++)
  146.     {
  147.        cout << data[i] << " ";
  148.     }
  149.     cout << endl;
  150.   }
  151. }

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

  1. #include<iostream>
  2. #include"SeqList.h"
  3. using namespace std;
  4. void show()
  5. {
  6.   cout << "---------------------------------------" << endl;
  7. }
  8. int main()
  9. {
  10.   int array[] = {,,,,,,,,,};
  11.   SeqList<int> seqList = SeqList<int>(array,);
  12.   cout << "顺序表为:" << endl;
  13.   seqList.PrintSeqList();
  14.   show();
  15.   cout << "顺序表的长度为:" << seqList.GetLength()<< endl;
  16.   cout << "第三个位置的元素是:" << seqList.GetElement() << endl;
  17.   cout << "元素3的位置是:" << seqList.GetLocal() << endl;
  18.   show();
  19.   cout << "在第5个位置插入元素22" << endl;
  20.   seqList.Insert(, );
  21.   cout << "顺序表为:" << endl;
  22.   seqList.PrintSeqList();
  23.   cout << "顺序表的长度为:" << seqList.GetLength() << endl;
  24.   show();
  25.   cout << "删除第5个位置的元素" << endl;
  26.   seqList.Delete();
  27.   cout << "顺序表为:" << endl;
  28.   seqList.PrintSeqList();
  29.   cout << "顺序表的长度为:" << seqList.GetLength() << endl;
  30.   show();
  31.   return ;
  32. }

三、运行示例结果

线性表之顺序表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. javascript 中检测数据类型的方法

    typeof 检测数据类型 javascript 中检测数据类型有好几种,其中最简单的一种是 typeof 方式.typeof 方法返回的结果是一个字符串.typeof 的用法如下: typeof v ...

  2. 命名实体识别(NER)

    一.任务 Named Entity Recognition,简称NER.主要用于提取时间.地点.人物.组织机构名. 二.应用 知识图谱.情感分析.机器翻译.对话问答系统都有应用.比如,需要利用命名实体 ...

  3. Spring4笔记6--Spring与AOP

    Spring与AOP: AOP的引入: 主业务经常需要调用系统级业务(交叉业务),如果在主业务代码中大量的调用系统级业务代码,会使系统级业务与主业务深度耦合在一起,大大影响了主业务逻辑的可读性,降低了 ...

  4. 源码安装postgresql数据库

    一般情况下,postgresql由非root用户启动. 1.创建postgres用户 groupadd postgres useradd -g postgres postgres 下面的操作都在pos ...

  5. 理解 Linux 的硬链接与软链接(待研究)

    从 inode 了解 Linux 文件系统 硬链接与软链接是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux ...

  6. 浅谈js变量作用域

    变量的作用域也是前端面试题常考的一个问题,掌握下面几个规律可以帮你更好的理解js的作用域. 1.作用域优先级遵循就近原则,函数内部的作用域优先级大于外部 var a=456; var b=111; f ...

  7. java基础29 迭代器 listIterator() 及各种遍历集合的方法

    listIterator() 迭代器包含了 Iterator() 迭代器中的所有方法. 1.ListIterator的常用方法 hasPrevious() :判断是否还有上一个元素,有则返回true  ...

  8. JS点击事件的重叠处理(多个点击事件出现冲突)

    最近开发遇见了一个这个样的情况,一个button在一个div中,点击buton是一个事件,点击大的div也是一个事件,但是由于button在div中,点击button会把两个事件都执行了,但是我们想点 ...

  9. Jenkins 集成 Sonar

    Jenkins 与 Sonar 集成:Sonar 是 Jenkins 之外独立运行的一个服务.Jenkins 中安装插件 SonarQube(并配置其 Sonar Server 的 URL / Acc ...

  10. getch与getchar区别

    getch(): 所在头文件:conio.h 函数用途:从控制台读取一个字符,但不显示在屏幕上 getchar(): 所在头文件:stdio.h getch与getchar基本功能相同,差别是getc ...