/*
  @content 线性链表之顺序表
  @date 2017-3-21 1:06
  @author Johnny Zen 
*/
/*
线性表
    顺序表
    链式表[带头指针/不带头指针] 
    单链表
    循环单链表 
双向链表
循环双链表      
ADT
 
List{ 
属性:
  length     长度
  DataList;        数据 
操作:
  init(array[])   表初始化
  Destory()    表销毁
  int getLength()  返回表的长度
  void InsertNode(int i,node) 按照位置i,插入表的结点
  void DeleteNode(int i,node) 按照位置i,删除表的结点
  void Delete(data)           按值删除表的结点 
  int Location(data)          按值查找,返回位置i[实际位置]
  Data Get(i)                 按位置查找,返回结点数据
  void sort()                 结点排序 
  bool Empty()                判空    
  void print()                遍历表   
} 
*/
 
//=================================
//顺序表
#include<iostream>
using namespace std;
 
const int MaxSize = 100;
template<class T>
class SeqList{
public:
  SeqList();
  SeqList(T a[],int n);
  ~SeqList();
  int  Length(){ return length; }
    
  void Insert(int x,T data);
  void Delete(int x);
  int  Location(T data);
  T    Get(int i); 
 
  void print();
  bool Empty();
 
private:
  int length;
  T datas[MaxSize];   
}; 
 
/***************方法实现区*******************/
template<class T>
SeqList<T>::SeqList(){
  length = 0;
}
 
template<class T>
SeqList<T>::SeqList(T a[],int n){
  if(n>MaxSize){
    throw "数组长度超出!!";
  }
    
  for(int i = 0;i<n;i++){
    datas[i] = a[i];
  }
  length = n;
}
 
template<class T>
SeqList<T>::~SeqList(){ }
 
//插入到第i个位置上(实际位置)
//    1 2 45 75 | 75 45 45  1 2
//    0 1 2  3  |  4  5  6  7 8
//    12 12 56  | 78 11  
// i = 5 
// [5] = [4]
// [4] = [3]
// [3] = [2]
// [2] = [1]
// [1] = [0]
template<class T>
void SeqList<T>::Insert(int x,T data){ 
  if(x>length+1||x<1)
    throw "位置超界!!!";
  if(length>=MaxSize)
    throw "位置溢出!!!";  
 
  for(int i=length;i>=x;i--){
    this->datas[i] = this->datas[i-1];  //最关键代码:从后面[length]开始往前走,元素向后挪 
  }
 
  this->datas[x-1] = data;
  length++;
} 
 
//按位置i(实际位置)删除结点 
//    1 2 45 75 | 75 45 45  1 2
//    0 1 2  3  |  4  5  6  7 8
//    12 12 56  | 78 11 
template<class T>
void SeqList<T>::Delete(int x){  
    
    if(x<1||x>length)
          throw "位置异常";
      
  for(int i=x-1;i<length-1;i++) 
    this->datas[i] = this->datas[i+1]; 
    
  length--;
} 
 
//按值查找,返回位置(实际位置)
template<class T> 
int  SeqList<T>::Location(T data){
  datas[length] = data;     //在最后一个结点的后面设置哨兵 
  int i = 0;
  while(datas[i]!=data) 
    i++;
  if(i==length) return -1;  
    return ++i;      
}
 
//按位置(实际位置)查找,返回结点值 
template<class T>
T  SeqList<T>::Get(int i){
  if(i<1||i>length)
    throw "位置超界!!!";
  return datas[i-1];
} 
 
//遍历顺序表 
template<class T>
void SeqList<T>::print(){
  for(int i = 0;i<this->Length();i++)
    cout<<datas[i]<<"\t";
}
 
template<class T>
bool SeqList<T>::Empty(){
  if(length>0) 
    return false; //0
  return true;    //1
}      
 
//=================================
int main(){
  int arr[]= {12,23,45,56,78};
  SeqList<int> test(arr,5);
 
  cout<<test.Get(5)<<endl; 
  cout<<test.Empty()<<endl;
  test.print();
  return 0;
}

[C++]线性链表之顺序表<二>的更多相关文章

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

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

  2. [Java算法分析与设计]--线性结构与顺序表(List)的实现应用

    说到线性结构,我们应该立马能够在脑子里蹦出"Array数组"这个词.在Java当中,数组和对象区别基本数据类型存放在堆当中.它是一连串同类型数据存放的一个整体.通常我们定义的方式为 ...

  3. 数据结构:队列 链表,顺序表和循环顺序表实现(python版)

    链表实现队列: 尾部 添加数据,效率为0(1) 头部 元素的删除和查看,效率也为0(1) 顺序表实现队列: 头部 添加数据,效率为0(n) 尾部 元素的删除和查看,效率也为0(1) 循环顺序表实现队列 ...

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

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

  5. 【PHP数据结构】线性表?顺序表?链表?别再傻傻分不清楚

    遵从所有教材以及各类数据结构相关的书书籍,我们先从线性表开始入门.今天这篇文章更偏概念,是关于有线性表的一个知识点的汇总. 上文说过,物理结构是用于确定数据以何种方式存储的.其他的数据结构(树.图). ...

  6. 线性表之顺序表(C语言实现)

    线性表是从数据元素的逻辑结构上定义的. 这种数据元素的逻辑结构的特征如下: 1.除开第一个和最后一个元素之外.所有元素都有一个前驱元素和后继元素. 2.第一个元素无前驱元素,但有后继元素. 3.最后一 ...

  7. [Python] 数据结构--实现顺序表、链表、栈和队列

    说明: 本文主要展示Python实现的几种常用数据结构:顺序表.链表.栈和队列. 附有实现代码. 来源主要参考网络文章. 一.顺序表 1.顺序表的结构 一个顺序表的完整信息包括两部分,一部分是表中元素 ...

  8. 数据结构中的顺序表和链表(Python语言)

    转载:https://blog.csdn.net/weixin_43187669/article/details/96426362 算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体. ...

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

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

随机推荐

  1. 一步步分析为什么B+树适合作为索引的结构

    在MySQL中,主要有四种类型的索引,分别为:B-Tree索引,Hash索引,Fulltext索引和R-Tree索引,本文讲的是B-Tree索引. 什么是索引 索引(Index)是帮助数据库高效获取数 ...

  2. React 组件库框架搭建

    前言 公司业务积累了一定程度,需要搭建自己的组件库,有了组件库,整个团队开发效率会提高恨多. 做组件库需要提供开发调试环境,和组件文档的展示,调研了几个比较主流的方案,如下: docz 配置简单,功能 ...

  3. ansible系列4-关闭ssh首次连接时提示

    在ansible配置文件中找到 /etc/ansible/ansible.cfg 方法1 在配置文件中找到 了解到问题原因为,我们了解到进行ssh连接时,可以使用-o参数将StrictHostKeyC ...

  4. BZOJ1433[ZJOI2009]假期的宿舍——二分图最大匹配

    题目描述 学校放假了······有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如A 和B都是学校的学生,A要回家,而C来看B,C与A不认识.我们假设每个人只能睡和自己直接认 ...

  5. hihocoder #1236 Scores (15北京赛区网络赛J) (五维偏序,强制在线,bitset+分块)

    链接:http://hihocoder.com/problemset/problem/1236 思路; 有n个五维的向量,给出q个询问,每个询问是一个五维向量,问有多少个向量没有一维比这个向量大.并且 ...

  6. Codeforces Round #419 (Div. 2) B. Karen and Coffee

    To stay woke and attentive during classes, Karen needs some coffee! Karen, a coffee aficionado, want ...

  7. 【BZOJ2427】[HAOI2010]软件安装(动态规划,Tarjan)

    [BZOJ2427][HAOI2010]软件安装(动态规划,Tarjan) 题面 BZOJ 洛谷 题解 看到这类题目就应该要意识到依赖关系显然是可以成环的. 注意到这样一个性质,依赖关系最多只有一个, ...

  8. 趣谈生成函数 =v=

    趣谈生成函数 =v= 今天luyouqi在洛谷随机跳题rand出来一道生成函数板子题,然后我给做了(雾 发现小伙伴们还不会生成函数,于是我试着写这篇生成函数简介.(其实我也不怎么会生成函数这么高级的东 ...

  9. The 2018 ACM-ICPC China JiangSu Provincial Programming Contest快速幂取模及求逆元

    题目来源 The 2018 ACM-ICPC China JiangSu Provincial Programming Contest 35.4% 1000ms 65536K Persona5 Per ...

  10. Luogu 1351 NOIP 2014 联合权值(贪心,计数原理)

    Luogu 1351 NOIP 2014 联合权值(贪心,计数原理) Description 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi, ...