线性表之顺序表C++实现
线性表之顺序表
一、头文件:SeqList.h
//顺序线性表的头文件
#include<iostream> const int MaxSize = ;
//定义顺序表SeqList的模板类
template<class DataType>
class SeqList{
public:
//顺序表无参构造器(创建一个空的顺序表)
SeqList(){ length = }
//顺序表有参构造器(创建一个长度为n的顺序表)
SeqList(DataType array[], int n);
//顺序表析构函数
~SeqList(){}
//求顺序表的长度
int GetLength(){ return length; }
//顺序表按位查找,返回i位置的元素
DataType GetElement(int i);
//顺序表按值查找,返回该元素所在的位置
int GetLocal(DataType x);
//顺序表在指定的位置插入指定的元素
void Insert(int i, DataType x);
//顺序表删除元素,返回删除的元素
DataType Delete(int i);
//输出顺序表中的元素
void PrintSeqList();
private:
//一维数组,存放数据元素
DataType data[MaxSize];
//顺序表的长度
int length;
}; //实现顺序表有参构造器
template<class DataType>
SeqList<DataType>::SeqList(DataType array[], int n)
{
if (n > MaxSize)
{
throw "传入的顺序表长度过长";
}
//给顺序表的存储元素的数组赋值
for (int i = ; i < n; i++)
{
data[i] = array[i];
}
//给顺序表的长度赋值
length = n;
} //实现顺序表按位查找
template<class DataType>
DataType SeqList<DataType>::GetElement(int i)
{
//判断是定的位置是否合理
if (i < || i >length)
{
throw "位置有误";
}
else
{
//返回指定位置的元素
return data[i - ];
}
} //实现顺序表按值查找,返回该元素所在的位置
template<class DataType>
int SeqList<DataType>::GetLocal(DataType x)
{
//遍历顺序表的元素
for (int i = ; i < length; i++)
{
//判断指定的元素是否在顺序表中
if (data[i] == x)
{
//返回指定元素在顺序表中的位置
return (i + );
}
}
//如果指定的元素不在顺序表中,则返回位置为0
return ;
} //实现顺序表插入元素
template<class DataType>
void SeqList<DataType>::Insert(int index, DataType x)
{
//判断插入的位置是否合理
if (length >= MaxSize)
{
throw "顺序表已存放满";
}
if (index< || index>length + )
{
throw "插入元素的位置有误";
}
//如何插入的位置合理,则把顺序表中从最后位置到指定插位置的元素整体向后移动一个位置
for (int j = length; j >= index; j--)
{
data[j] = data[j - ];
}
//给插入的位置放入指定的元素
data[index - ] = x;
length++;
} //实现顺序表删除指定位置的元素
template<class DataType>
DataType SeqList<DataType>::Delete(int index)
{
//声明要取出的元素
DataType x;
//判断要删除的位置是否合理
if (index< || index>length)
{
throw "删除的位置有误";
}
else
{
//取出指定位置的元素
x = data[index-];
//将指定位置后的元素全部都向前移动一个位置
for (int i = index; i < length; i++)
{
data[i - ] = data[i];
}
//删除顺序表中的元素后,其长度减1
length--;
}
return x;
} //顺序输出顺序表中的元素
template<class DataType>
void SeqList<DataType>::PrintSeqList()
{
if (length < )
{
throw "顺序表中没有元素";
}
else
{
//顺序输出顺序表元素
for (int i = ; i < length; i++)
{
cout << data[i] << " ";
}
cout << endl;
}
}
二、测试线性表之顺序表:TestSeqList.cpp
#include<iostream>
#include"SeqList.h"
using namespace std;
void show()
{
cout << "---------------------------------------" << endl;
}
int main()
{
int array[] = {,,,,,,,,,};
SeqList<int> seqList = SeqList<int>(array,);
cout << "顺序表为:" << endl;
seqList.PrintSeqList();
show();
cout << "顺序表的长度为:" << seqList.GetLength()<< endl;
cout << "第三个位置的元素是:" << seqList.GetElement() << endl;
cout << "元素3的位置是:" << seqList.GetLocal() << endl;
show();
cout << "在第5个位置插入元素22" << endl;
seqList.Insert(, );
cout << "顺序表为:" << endl;
seqList.PrintSeqList();
cout << "顺序表的长度为:" << seqList.GetLength() << endl;
show();
cout << "删除第5个位置的元素" << endl;
seqList.Delete();
cout << "顺序表为:" << endl;
seqList.PrintSeqList();
cout << "顺序表的长度为:" << seqList.GetLength() << endl;
show();
return ;
}
三、运行示例结果

线性表之顺序表C++实现的更多相关文章
- C#线性表之顺序表
线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...
- c/c++ 线性表之顺序表
线性表之顺序表 存储在连续的内存空间,和数组一样. 下面的代码,最开始定义了一个能存8个元素的顺序表,当超过8个元素的时候,会再追加开辟空间(函数:reInit). 实现了以下功能: 函数 功能描述 ...
- [C++]线性链表之顺序表<一>
顺序表中数据元素的存储地址是其序号的线性函数,只要确定了存储顺序表的起始地址(即 基地址),计算任意一个元素的存储地址的时间是相等的,具有这一特点的存储结构称为[随机存储]. 使用的基本数据结构:数组 ...
- [C++]线性链表之顺序表<二>
/* @content 线性链表之顺序表 @date 2017-3-21 1:06 @author Johnny Zen */ /* 线性表 顺序表 链式表[带头指针/不 ...
- [C++]数据结构:线性表之顺序表
1 顺序表 ADT + Status InitList(SeqList &L) 初始化顺序表 + void printList(SeqList L) 遍历顺序表 + int ListLengt ...
- [数据结构 - 第3章] 线性表之顺序表(C++实现)
一.类定义 顺序表类的定义如下: #ifndef SEQLIST_H #define SEQLIST_H typedef int ElemType; /* "ElemType类型根据实际情况 ...
- 数据结构Java实现02----线性表与顺序表
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- 数据结构Java实现01----线性表与顺序表
一.线性结构: 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素: (2)第一个数据元素没有前驱数据元素: (3)最后一个数据元素没有 ...
- C# 数据结构 线性表(顺序表 链表 IList 数组)
线性表 线性表是最简单.最基本.最常用的数据结构.数据元素 1 对 1的关系,这种关系是位置关系. 特点 (1)第一个元素和最后一个元素前后是没有数据元素,线性表中剩下的元素是近邻的,前后都有元素. ...
随机推荐
- Linux Shell管道调用用户定义函数(使shell支持map函数式特性)
Linux中有一个管道的概念,常用来流式的处理文本内容,比如一个文件对其中的每一行应用好几个操作,出于两个方面的考虑可能需要在管道中使用用户定义函数: 1. 刚需: 内置的sed/awk之类的可能没法 ...
- linux学习记录.5.git & github
参考 https://www.linuxidc.com/Linux/2016-11/136769.htm 安装 安装 Git: apt-get install git 查看当前版本: git --ve ...
- solr配置中文分词器——(十二)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqcAAAGzCAIAAACdKClDAAAgAElEQVR4nOydd5gUxdbGx5xASZKXLB
- PyTorch快速入门教程七(RNN做自然语言处理)
以下内容均来自: https://ptorch.com/news/11.html word embedding也叫做word2vec简单来说就是语料中每一个单词对应的其相应的词向量,目前训练词向量的方 ...
- ubuntu16.04 eclipse+pydev 配置
参考:http://blog.csdn.net/bluish_white/article/details/56509446,http://blog.csdn.net/qing101hua/articl ...
- 对于Linux平台下C语言开发中__sync_函数的认识(转)
reference:http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html#Atomic-Builtins A built-i ...
- COM组件服务访问权限
解决办法 :添加ASP.NET权限访问COM组件服务. IIS 5 上为 {MACHINE}\ASPNET IIS 6 和 IIS 7 上为网络服务:NETWORK SERVICE IIS 7.5 上 ...
- SQLAlchemy-介绍安装
一:概述 SQLAlchemy的SQL工具包和对象关系映射是一个全面的工具集,用来处理数据库和Python. 它有几个不同的功能领域,可以单独使用或组合使用. 所示的主要组件,组件依赖关系组织成层: ...
- xss攻击原理与解决方法
概述 XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器 执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列 表,然后向联系 ...
- Java模拟按键
JDK自带了Robot类,此类用于为测试自动化.自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件.Robot 的主要目的是便于 Java 平台实现自动测试. 详情可查看jdk1.6 ...