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

使用的基本数据结构:数组

特点:顺序存取,随机访问。

/*
Name: SeqList
Copyright: 1.0
Author: Johnny Zen
Date: 04/06/17 21:51
Description: 线性链表之顺序表
*/
/*
Chinese:顺序(线性)表
English:SeqList
*/
#include<iostream>
using namespace std;

//顺序表ADT
const int MAXSIZE = 100;
template<class T>
class SeqList{
public:
SeqList(); //无参构造函数
SeqList(T array[],int length); //有参构造函数
~SeqList() { cout<<"\n析构成功!\n"<<endl; }; //析构函数
bool insertElement(T data,int n); //按位置插入元素
T deleteElementByLocation(int n); //按位置删除元素
int deleteElementByValue(T data); //按值删除元素
int searchElement(T data); //按值搜索元素,返回位置
T searchElement(int n); //按位置搜索元素,返回值
void print(); //输出表内元素
int getLength(); //获取当前元素个数
public:
T array[MAXSIZE]; //存放元素的数组
int length; //元素个数
};

//无参构造函数
template<class T>
SeqList<T>::SeqList(){
length = 0;
for(int i=0;i<MAXSIZE;i++){
array[i] = 0;
}
}

//构造函数
template<class T>
SeqList<T>::SeqList(T array[],int length){
this->length = length;
for(int i=0;i<length;i++){
this->array[i] = array[i];
}

cout<<"\n初始化成功!\n"<<endl;
}

//按[实际]位置插入元素
//2 8 9 0 3 7
//0 1 2 3 4 5
// ↑
// (n-1)
//比如:插入在第3个位置上
//起始: (从后往前)
//array[length] = array[length-1] //array[length]:增加的1个新结点
//结束:
//array[n] = array[n-1];//array[n-1]:要重置新值的位置
template<class T>
bool SeqList<T>::insertElement(T data,int n){
//防溢出
if(n<1||n>length){
return false;
}

for(int i=length;i>n-1;i--){
array[i] = array[i-1];
}

array[n-1] = data;
length++;

return true;
}

//按[实际]位置删除元素
//2 8 9 0 3 7
//0 1 2 3 4 5
// ↑
// (n-1)
//比如:插入在第3个位置上
//起始: (从前往后)
//array[n-1] = array[n] //array[n-1]:重置新值的位置
//结束:
//array[length-2] = array[length-1];//array[length-1]:要删除掉的结点
template<class T>
T SeqList<T>::deleteElementByLocation(int n){
//边界检测
if(n<1||n>=length)
return (T)false;
T value = array[n-1];
for(int i=n-1;i<=length-2;i++){
array[i] = array[i+1];
}

//减少表长度
length--;
//恢复删除掉的结点的默认值(0)
array[length] = 0;
return value;
}

//按值删除结点,返回实际位置
template<class T>
int SeqList<T>::deleteElementByValue(T data){
array[length] = data;
int i;
for(i=0;array[i]!=data;i++);

if(i!=length){ //found success
deleteElementByLocation(i); //按值删除
return i+1;
}else{ //found fail
//recover array[length]'s default value(0)
array[length] = 0;
return -1;
}
}

//按值查找
//算法:顺序查找
template<class T>
int SeqList<T>::searchElement(T data){
//array[length] as array's guard of border
T array[length] = data;
int i;
for(i=0;array[i]!=data;i++);

//recover array[length]'s default value(0)
array[length] = 0;

return i==length?(i+1):(-1); //-1 : not found
}

//输出表的长度
template<class T>
int SeqList<T>::getLength(){
return length;
}

//输出数组元素
template<class T>
void SeqList<T>::print(){
for(int i=0;i<length;i++){
if(i%10==0){
cout<<endl;
}
cout<<array[i]<<'\t';
}
cout<<"\n****************print end****************\n";
}

int main(){
//输入数据
const int n = 10;
char arr[n];
for(int i=0;i<n;i++){
cin>>arr[i];
}

//测试
SeqList<char> test(arr,n);
cout<<"表所有元素:"<<endl;
test.print();
test.insertElement('f',3);
cout<<"在第3个位置上插入元素 f "<<endl;
test.print();
//按位置删除结点
cout<<test.deleteElementByLocation(3)<<endl;
cout<<"删除第三个位置的元素后:"<<endl;
test.print();
//获取表长度
cout<<test.getLength();
return 0;
}

/*
Test Data:
1 0 9 8 6 5 4 3 2 7
*/

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

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

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

  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. HDU--5519 Sequence II (主席树)

    题目链接 2016年长春ccpc I 题 题目大意 : 给你n(n≤2∗105n≤2∗105)个数,每个数的大小 0<Ai≤2∗10^5   0<Ai≤2∗10^5. 再给你m(m≤2∗1 ...

  2. An Introduction to OAuth 2

    PostedJuly 21, 2014 1.1mviews SECURITY API CONCEPTUAL Mitchell Anicas Introduction OAuth 2 is an aut ...

  3. 10张图带你深入理解Docker容器和镜像

    http://dockone.io/article/783 [编者的话]本文用图文并茂的方式介绍了容器.镜像的区别和Docker每个命令后面的技术细节,能够很好的帮助读者深入理解Docker. Doc ...

  4. log4j2 自定义配置文件,java载入

    http://logging.apache.org/log4j/2.x/faq.html#separate_log_files How do I reconfigure log4j2 in code ...

  5. bzoj2194 快速傅里叶之二

    题意:对于k = 0 ... n求 解: 首先把i变成从0开始 我们发现a和b的次数(下标)是成正比例的,这不可,于是反转就行了. 反转b的话,会发现次数和是n + k,这不可. 反转a就很吼了. 这 ...

  6. windows蜜汁调音

    哈,用的蜂鸣器,我静音了这东西还放. 只能调的很垃圾,但是很好玩. #include<cstdio> #include<windows.h> using namespace s ...

  7. POJ 1971 Parallelogram Counting (Hash)

          Parallelogram Counting Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 6895   Acc ...

  8. rabbitMQ 3.6.15生产环境

    服务器配置 系统环境:CentOS 7 由于RabbitMQ依赖erlang, 所以需要先安装erlang 下载erlang 下载地址 http://erlang.org/download/ linu ...

  9. 基于RBAC模型的权限系统设计(Github开源项目)

    RBAC(基于角色的访问控制):英文名称Rose base Access Controller.本博客介绍这种模型的权限系统设计.取消了用户和权限的直接关联,改为通过用户关联角色.角色关联权限的方法来 ...

  10. window下域名解析系统DNS诊断命令nslookup详解

    Ping指令我们很熟悉了,它是一个检查网络状况的命令,在输入的参数是域名的情况下会通过DNS进行查询,但只能查询A记录和CNAME(别名)记录,还会返回域名是否存在,其他的信息都是没有的.如果你需要对 ...