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

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

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

/*
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. htmlunit 校验验证码

    htmlUnit 校验验证码 直接上代码 String url = "http://www.zycg.gov.cn/"; WebclientUtil webClientUtils ...

  2. iview tree 获取选中子节点的整条数据链

    这样子获取到数据是,checked等于true的,获取不到他的父级,父级的父级 解决办法代码如下: //需要有一个唯一ID //==================================== ...

  3. CF1101

    D:题意:树上每个顶点有个权值,求最长链,满足链上gcd > 1 解:对每个质数建虚树,每个点只会拆成log个点,所以是log2的. #include <bits/stdc++.h> ...

  4. A1042. Shuffling Machine

    Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techn ...

  5. MySQL事务,事务隔离级别详解

    1.什么是事务 指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 2.事务的4个特性 原子性(Atomicity).一致性(Consistency).隔离性(Isolatio ...

  6. python中的单例模式、元类

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  7. ECharts使用心得总结

    https://blog.csdn.net/whiteosk/article/details/52684053 项目中的图表形式很多,基本可以在ECharts中找到相应实例,但UI设计图中的图表跟百度 ...

  8. 打印慢sql的日志

  9. Html的简单学习笔记

    1.Html简介 1)什么是html: HyperText Markup Language:超文本标记语言,网页语言. >超文本:超出文本范围. >标记: html中所有的操作都是使用标记 ...

  10. BeautifulSoup获取图片

    参看文档:https://www.cnblogs.com/forever-snow/p/8506746.html