数据结构C++实现代码-顺序表
参考:https://blog.csdn.net/ebowtang/article/details/43094041
//seqList.h//
//包含顺序表中的声明// #include<iostream>
template<typename DataType>
class SeqList
{
public:
SeqList(int size = defaultSize)
{
if (size > )
{
maxSize = size;
length = ;
elements = new DataType[maxSize];
for (int i = ; i < maxSize; i++)
{
elements[i] = NULL;
} }
else
{
cout << "Error Length of SeqList!" << endl; }
}
~SeqList()
{
//delete[] elements;
}
bool InsertElement(DataType data);
DataType GetElement(int location);
bool DelElement(int location);
bool ChangeElement(int location, DataType data);
bool PrintList();
int FindElement(DataType data);
bool isEmpty(SeqList L);
bool InitList(int nLen);
void ClearList(SeqList *L);
void DestroyList();
void ConverseList();
int getLength()
{
return length;
}
private:
static const int defaultSize = ;
DataType *elements;
int maxSize;
int length;
};
//seqList.cpp//
//包含顺序表中主要函数功能的具体实现//
#include<iostream>
#include"seqList.h"
template <typename DataType>
bool SeqList<DataType>::InsertElement(DataType data)
{
int curIndex = length;
if (length >= maxSize)
{
return false;
}
else
{
elements[curIndex] = data;
length++;
return true;
}
} template <typename DataType>
bool SeqList<DataType>::InitList(int nLen)
{
DataType nchar = 'A';
for (int i = ; i < nLen; i++)
{
InsertElement(nchar++);
}
return true;
}
template <typename DataType>
DataType SeqList<DataType>::GetElement(int location)
{
if (location< || location>length)
{
std::cout << "参数无效" << std::endl;
return ;
}
else
{
return elements[location];
}
}
template <typename DataType>
bool SeqList<DataType>::DelElement(int location)
{
if (location< || location >length)
{
std::cout << "参数无效" << std::endl;
return false;
}
else
{
int j = ;
for (int i = location; i < length; i++)
{
elements[location + j - ] = elements[location + j];
j++;
}
length--;
return true;
}
}
template <typename DataType>
bool SeqList<DataType>::ChangeElement(int location, DataType data)
{
if (location< || location>length)
{
std::cout << "参数无效" << std::endl;
return false;
}
else
{
elements[location - ] = data;
return true;
}
} template <typename DataType>
bool SeqList<DataType>::PrintList()
{
for (int i = ; i < length; i++)
std::cout << GetElement(i) << " ";
std::cout<< endl;
return true;
}
template <typename DataType>
int SeqList<DataType>::FindElement(DataType data)
{
for (int i = ; i < length; i++)
{
if (elements[i] == data)
{
return i;
}
}
std::cout << "没有更改元素" << std::endl;
return ;
} template <typename DataType>
bool SeqList<DataType>::isEmpty(SeqList<DataType> L)
{
if (L.length == )
return true;
else
return false;
}
template <typename DataType>
void SeqList<DataType>::ClearList(SeqList *L)
{
for (int i = ; i < length; i++)
elements[i] = ;
L->length = ;
L->maxSize = ;
}
template <typename DataType>
void SeqList<DataType>::DestroyList()
{
length = ;
maxSize = ;
delete[] elements;
elements = NULL;
}
template <typename DataType>
void SeqList<DataType>::ConverseList()
{
for (int i = ; i < length / ; i++)
{
DataType temp;
temp = elements[i];
elements[i] = elements[length - - i];
elements[length - i - ] = temp;
}
}
//main.cpp//
#include "seqList.cpp"
#include "windows.h"
using namespace std;
typedef char Mytype;
int main(int argc, char* argv[])
{
int nLen = ;
cout << "请输入顺序表的长度: ";
cin >> nLen;
SeqList<Mytype>list(nLen);
list.InitList(nLen);
cout << "初始化后的内容为l(亲,萌妹纸自动帮您完成的哦!!!)" << endl;
list.PrintList();
int nPos = ;
cout << "你想删除的那个位置的元素(位置从1开始算起)";
cin >> nPos;
while (true)
{
if (nPos > list.getLength())
{
cout << "输入过大,重新输入(位置从1开始算起)" << endl;
cin >> nPos;
}
else
{
break;
}
}
list.DelElement(nPos);
list.PrintList();
cout << "现在顺序表的长度为: " << endl;
cout << list.getLength() << endl;
Mytype mchar = '';
int nPos1 = ;
char ans = 'n';
do
{
cout << "请输入您想改变的指定位置和相应元素(示例:“k 5”)";
cin >> mchar >> nPos1;
list.ChangeElement(nPos1, mchar);
cout << "继续修改?(Y/N)" << endl;
cin >> ans;
} while (ans == 'y' || ans == 'Y');
cout << "更改后的顺序表为: " << endl;
list.PrintList();
cout << "执行逆序: " << endl;
list.ConverseList();
list.PrintList();
Mytype bchar = '';
cout << "请输入您想查找的元素: ";
cin >> bchar;
int npos2 = list.FindElement(bchar);
cout << "您查找的元素的位置为:" << endl;
cout << npos2 << endl;
list.ClearList(&list);
if (list.isEmpty(list) == true)
{
cout << "顺序表已被清空" << endl; }
else
{
cout << "顺序表还原元素" << endl; }
cout << "5秒后执行销毁命令....................." << endl;
Sleep();
cout << "4秒后执行销毁命令....................." << endl;
Sleep();
cout << "3秒后执行销毁命令....................." << endl;
Sleep();
cout << "2秒后执行销毁命令....................." << endl;
Sleep();
cout << "1秒后执行销毁命令....................." << endl;
Sleep();
cout << "再见,谢谢....................." << endl;
list.DestroyList();
system("PAUSE");
return ;
}
代码运行结果图:

2018-04-2211:13:09
数据结构C++实现代码-顺序表的更多相关文章
- C:数据结构与算法之顺序表
顺序表作为数据结构的开端,说明这里面很多基础要学,初学者一开始都会混淆,今天我们来一步一步来建立一个完整的顺序表,可以任我们控制的顺序表,首先先定义一个顺序表 /* Note:Your choice ...
- 【数据结构 Python & C++】顺序表
用C++ 和 Python实现顺序表的简单操作 C++代码 // Date:2019.7.31 // Author:Yushow Jue #include<iostream> using ...
- 《数据结构》2.2顺序表(sequence list)
//顺序表节点的定义 typedef struct { datatype data[MAXSIZE]; //数组容量的上限 int len; //记录最后一个元素的位置,相当于一个指针,表空时len= ...
- python基础下的数据结构与算法之顺序表
一.什么是顺序表: 线性表的两种基本的实现模型: 1.将表中元素顺序地存放在一大块连续的存储区里,这样实现的表称为顺序表(或连续表).在这种实现中,元素间的顺序关系由它们的存储顺序自然表示. 2.将表 ...
- 数据结构与算法之顺序表C语言实现
顺序表等相关概念请自行查阅资料,这里主要是实现. 注: 1.顺序表C语言实现: 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善: 3.提供几个简单函数,可自行添加功能: 4.可用C+ ...
- 《数据结构》C++代码 邻接表与邻接矩阵
上一篇“BFS与DFS”写完,突然意识到这个可能偏离了“数据结构”的主题,所以回来介绍一下图的存储:邻接表和邻接矩阵. 存图有两种方式,邻接矩阵严格说就是一个bool型的二维数组,map[i][j]表 ...
- 《数据结构》C++代码 线性表
线性表,分数组和链表两种(官方名称记得是叫顺序存储和链式存储).代码里天天用,简单写写. 首先是数组,分静态.动态两种,没什么可说的,注意动态的要手动释放内存就好了. 其次是链表,依旧分静态.动态.课 ...
- 【PHP数据结构】顺序表(数组)的相关逻辑操作
在定义好了物理结构,也就是存储结构之后,我们就需要对这个存储结构进行一系列的逻辑操作.在这里,我们就从顺序表入手,因为这个结构非常简单,就是我们最常用的数组.那么针对数组,我们通常都会有哪些操作呢? ...
- 顺序表Vector
程序中会使用数据结构:例如:顺序表.链表.二叉树: 数据结构在底层中本质上只有两种:数据之间挨着和不挨着: 1.关于Vector
随机推荐
- MySql常见命令、函数
⒈常见命令 命令 说明 show databases; 显示数据库列表 use DataBaseName; 打开指定的数据库 show tables; 显示当前打开数据库的表列表 show table ...
- 【转】数据库介绍(MySQL安装 体系结构、基本管理)
[转]数据库介绍(MySQL安装 体系结构.基本管理) 第1章 数据库介绍及mysql安装 1.1 数据库简介 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新 ...
- ethtool 解决网卡丢包严重和网卡原理【转】
转自:https://blog.csdn.net/u011857683/article/details/83758869 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...
- Linux内核的整体架构简介
1. 前言 本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统.之后,会介绍Linux内核源文件的目录结构,并和各个软 ...
- ffmpeg 版本升级到 4.0 增加 libaom 库 [AOMedia 的 AV1 视频编码格式]
win10 中交叉编译 libaom 时 注意事项 libaom 源代码 下载 git -c "http.proxy=ip:port" clone https://aomedia. ...
- 010_mac常用docker维护命令
一. ➜ ~ docker search rabbitmq #搜索 NAME DESCRIPTION STARS OFFICIAL AUTOMATED rabbitmq RabbitMQ is an ...
- Windows Server 2008 R2 报错事件ID:10之WMI报错
问题描述: Details -Event filter with query "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHE ...
- Docker 导出 & 导入
Docker 容器因为它的快速部署被深受喜爱.本文记录 Docker 容器的导出与导入,分别用到 Docker 的 export 和 import 命令. 1.查看正在运行的容器: [root@loc ...
- MR1和MR2(Yarn)工作原理流程
一.Mapreduce1 图1 MR1工作原理图 工作流程主要分为以下6个步骤: 1 作业的提交 1)客户端向jobtracker请求一个新的作业ID(通过JobTracker的getNewJobI ...
- bsdiff的编译与使用
bsdiff是一个差异包比较工具,可以用来实现增量更新. 下载地址:http://www.daemonology.net/bsdiff 编译 Mac环境 版本:macOS 10.12 1.解压下载的b ...