//SequentialList.h 顺序表模板类

#ifndef SEQUENTIAL_LIST_HXX
#define SEQUENTIAL_LIST_HXX

using std::cout;

using std::endl;

const int MaxSize=100;   //顺序表数组最大值

template<class T>
class SeqList    //定义模板类SeqList(顺序表)
{
  public:

    SeqList() { length=0; }    //无参构造函数,建立一个空的顺序表
    SeqList(T a[],int n);      //有参构造函数,建立一个长度为n的顺序表 n不大于MaxSize
    ~SeqList() {}         //析构函数

    int Length() { return length; } //求线性表长度

    T Get(int i);          //按位查找,在线性表中查找第i个元素

    int Locate(T x);        //按值查找,在线性表中找值为x的元素序号

    void Insert(int i,T x);     //插入操作,在线性表中的第i个位置插入值为x的元素

    T Delete(int i);        //删除操作,删除线性表的第i个元素

    void PrintList();        //遍历操作,按序号依次输出各元素

  private:
    T data[MaxSize];      //存放数据元素的数组
    int length;         //线性表的长度
};

template<class T>
SeqList<T>::SeqList(T a[],int n)
{
  if(n>MaxSize) throw "参数非法";
  for(int i=0;i<n;i++)
    data[i]=a[i];
  length=n;
}

template<class T>
T SeqList<T>::Get(int i)
{
  if(i<1||i>length) throw "参数非法";
  return data[i-1];
}

template<class T>
int SeqList<T>::Locate(T x)
{
  for(int i=0;i<length;i++)
  if(data[i]==x) return i+1;  //下标为i的元素等于x,返回其序号i+1
  return 0;           //退出循环,说明查找失败
}

template<class T>
void SeqList<T>::Insert(int i,T x)
{
  if(length>=MaxSize) throw "上溢";
  if(i<1||(i>length+1)) throw "位置溢出";
  for(int j=length;j>=i;j--)
    data[j]=data[j-1];       //注意第j个元素存在于数组小标为j-1处
  data[i-1]=x;
  length++;
}

template<class T>
T SeqList<T>::Delete(int i)
{
  if(length==0) throw "下溢";
  if(i<1||i>length) throw "位置";
  T x=data[i];          //取出位置i的元素
  for(int j=i;j<length;j++)
    data[j-1]=data[j];      //此处j已经是元素所在的数组下表
  length--;
  return x;
}

template<class T>
void SeqList<T>::PrintList()
{
  for(int i=0;i<length;i++)
    cout<<data[i];        //依次输出线性表的元素值
}

#endif

//seqlisttest.cpp
#include <iostream>
#include "SequentialList.h"
using std::cout;
using std::endl;

int main()
{
  int m[10]={1,2,3,4,28,50,7,8,9,10};
  SeqList<int> seqList(m,10);

  cout<<"顺序表原始状态"<<endl;
  seqList.PrintList();
  cout<<"顺序表第5个元素值"<<seqList.Get(5)<<endl;
  cout<<"顺序表长度"<<seqList.Length()<<endl;

  cout<<"顺序表删除一个元素后的状态"<<endl;
  seqList.Delete(5);
  seqList.PrintList();
  cout<<"顺序表第5个元素值"<<seqList.Get(5)<<endl;
  cout<<"顺序表长度"<<seqList.Length()<<endl;

  cout<<"顺序表增加一个元素后的状态"<<endl;
  seqList.Insert(5,108);

  seqList.PrintList();

  cout<<"顺序表第5个元素值"<<seqList.Get(5)<<endl;
  cout<<"顺序表长度"<<seqList.Length()<<endl;

  cout<<"顺序表中数值=108在表中第"<<seqList.Locate(108)<<"位"<<endl;

  return 0;

}

C++ 数据结构学习一(顺序表)的更多相关文章

  1. C++数据结构学习之顺序表

    顺序表是数据结构中最基本也是应用相当广泛的一种数据结构类型.它通常包含三个私有成分,即指向数据数组的头指针.当前表长以及表的实际容量.表的头指针通常指向数据数组的基地址,通过数组的形式进行访问数据数组 ...

  2. 【数据结构】之顺序表(Java语言描述)

    之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...

  3. 【数据结构】之顺序表(C语言描述)

    顺序表是线性表的一种,它将元素存储在一段连续的内存空间中,表中的任意元素都可以通过下标快速的获取到,因此,顺序表适合查询操作频繁的场景,而不适合增删操作频繁的场景. 下面是使用 C语言 编写的顺序表的 ...

  4. C语言学习笔记-顺序表

    #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include "coni ...

  5. 数据结构 单链表&顺序表

    顺序表: 一般使用数组(C语言中的数组采用顺序存储方式.即连续地址存储)来描述. 优点:在于随机访问元素, 缺点:插入和和删除的时候,需要移动大量的元素. 链表: 优点:插入或删除元素时很方便,使用灵 ...

  6. 数据结构——Java实现顺序表

    一.分析 什么是顺序表?顺序表是指用一组地址连续的存储单元依次存储各个元素,使得在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中的线性表.一个标准的顺序表需要实现以下基本操作: 1.初始化顺序表 ...

  7. 数据结构之线性顺序表ArrayList(Java实现)

    一.ListMe接口: import java.util.ArrayList; //实现线性表(顺序表和链表)的接口://提供add get isEmpty size 功能public interfa ...

  8. 数据结构之动态顺序表(C实现)

    线性表有2种,分为顺序表和链表. 顺序表: 采用顺序存储方式,在一组地址连续的存储空间上存储数据元素的线性表(长度固定) 链表: 有3种,单链表.双向链表.循环链表(长度不固定) seqList.h ...

  9. 【c++版数据结构】之顺序表的实现

    SeqList.h #ifndef SEQLIST_H #define SEQLIST_H #include<iostream> using namespace std; typedef ...

随机推荐

  1. 乐酷工作室孙志伟:Testin云測试有广度有深度 省钱省力值得信赖

    乐酷工作室孙志伟:Testin云測试有广度有深度 省钱省力值得信赖 2014/10/16 · Testin · 开发人员訪谈 乐酷工作室是一个专业从事移动终端应用及游戏自主研发和运营的创业团队,眼下拥 ...

  2. word2vec配置到使用

    (1)首先下载word2vec,地址:https://code.google.com/p/word2vec/,可能下载的时候有问题,google上不去,那么可以从csdn上面下载. 解压后目录如下: ...

  3. couldn't connect to the device trackpad

  4. MySQL如何使用索引 较为详细的分析和例子

    在数据库表中,使用索引可以大大提高查询速度. 假如我们创建了一个 testIndex 表: CREATE TABLE testIndex(i_testID INT NOT NULL,vc_Name V ...

  5. 运维人员:走好你的IT运维路

      转自 http://os.51cto.com/art/201303/387120.htm   现阶段,大多数运维人员只是处于被动低效率手工救火的状态,企业对其重视程度不高,导致部分运维人员对自己的 ...

  6. 初学swift笔记 函数(六)

    import Foundation /* func 函数名 (参数名:参数类型) { } func 函数名 (参数名:参数类型) ->Void{ } func 函数名 (参数名:参数类型) -& ...

  7. [Python] 应用kNN算法预测豆瓣电影用户的性别

    应用kNN算法预测豆瓣电影用户的性别 摘要 本文认为不同性别的人偏好的电影类型会有所不同,因此进行了此实验.利用较为活跃的274位豆瓣用户最近观看的100部电影,对其类型进行统计,以得到的37种电影类 ...

  8. Memcache缓存系统原理

    在Web服务开发中,服务端缓存是服务实现中所常常采用的一种提高服务性能的方法.其通过记录某部分计算结果来尝试避免再次执行得到该结果所需要的复杂计算,从而提高了服务的运行效率. 除了能够提高服务的运行效 ...

  9. 转:JavaScript函数式编程(三)

    转:JavaScript函数式编程(三) 作者: Stark伟 这是完结篇了. 在第二篇文章里,我们介绍了 Maybe.Either.IO 等几种常见的 Functor,或许很多看完第二篇文章的人都会 ...

  10. docker 私有仓库内容

    docker:/root# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES eb6d0ef3b9e2 linux123 ...