c++实验2 顺序存储线性表
线性表顺序存储
实现了动态数组的增删改查 前驱后继 A=AUB 动态数组右移
(1)顺序表存储结构的定义(类的声明):
class SeqList
{
protected:
DataType *list; //数组
int maxSize; //最大元素个数
int size; //当前元素个数
public:
SeqList(); //无参构造
SeqList(int max=);
SeqList(DataType a[],int max=); //构造函数
~SeqList(void); //析构函数
int Size(void) const; //取当前数据元素个数
void Insert(const DataType& item,int i); //插入
DataType Delete(const int i); //删除
DataType GetData(int i) const; //取数据元素
DataType getall(); //得到所有元素
DataType finde(DataType e); //查询e
bool isnull(); //判表空算法
DataType before(DataType e); //找到前驱
DataType after(DataType e); //找到后继
};
(2)初始化顺序表算法实现(不带参数的构造函数)
SeqList::SeqList()
{
maxSize=;
size=;
list=new DataType[maxSize];
}
(3)顺序表的建立算法(带参数的构造函数)
SeqList::SeqList(DataType a[],int n) //构造函数
{
maxSize=n;
size=;
list=new DataType[maxSize];
int b=sizeof(a)/sizeof(DataType);
for(int i=;i<b;i++)
list[i]=a[i];
size=b;
}
(4)在顺序表的第i个位置前插入元素e算法
void SeqList::Insert(const DataType& e,int i) //插入
//在指定位置i前插入一个数据元素item
{
//从size-1至i逐个元素后移
for(int j=size;j>i;j--)
list[j]=list[j-];
list[i]=e; //在i位置插入item
size++ ; //当前元素个数加1
}
(5)删除线性表中第i个元素算法
DataType SeqList::Delete(const int i) //删除
//删除指定位置i的数据元素,删除的元素由函数返回
{
//判断删除位置 i 的合法性
DataType x=list[i]; //取到要删除的元素
//从i+1至size-1逐个元素前移
for(int j=i;j<size-;j++)
list[j]=list[j+];
size--; //当前元素个数减1
return x; //返回删除的元素
}
(6)遍历线性表元素算法
DataType SeqList::getall()
{ for(int i=;i<Size();i++)
cout<<list[i];
}
(7)获得线性表长度算法
int SeqList::Size(void) const //取当前数据元素个数
{
return size;
}
(8)在顺序线性表中查找e值,返回该元素的位序算法
DataType SeqList::finde(DataType e)
{
for(int i=;i<Size();i++)
{
if(list[i]==e)
return i;
}
return -;
}
(9)获得顺序线性表第i个元素的值
DataType SeqList::GetData(int i) const //取数据元素
//取位置i的数据元素,取到的数据元素由函数返回
{ return list[i]; //返回取到的元素
}
(10)判表空算法
bool SeqList::isnull()
{
if(size>)
return ;
else
return ; }
(11)求直接前驱结点算法
DataType SeqList::before(DataType e)
{
if(finde(DataType e)>)
return GetData(finde(DataType e)-);
else
{
cout<<"没有找到"<<endl;
return -;
}
}
(12)求直接后继结点算法
DataType SeqList::before(DataType e)
{
if(finde(DataType e)<size)
return GetData(finde(DataType e)+);
else
{
cout<<"没有找到"<<endl;
return -;
}
}
(13)实现A=AUB算法。
DataType SeqList::AUB(SeqList s1)
{
SeqList s2();
int mina=,minb=;
for(int i=;i<this->size+s1.size-;i++)
{ if(this->GetData(mina)>s1.GetData(minb))
{
s2.Insert(s1.GetData(minb),i);
minb++;
}
else if(this->GetData(mina)<s1.GetData(minb))
{
s2.Insert(GetData(mina),i);
mina++;
}
else
{
s2.Insert(s1.GetData(minb),i);
mina++;
minb++;
}
}
if(this->GetData(mina)!=)
s2.Insert(GetData(mina),size+s1.size-);
else
s2.Insert(s1.GetData(minb),size+s1.size-);
cout<<"\nAUB=";
s2.getall();
return ;
}
(14)对以上顺序表类中的基本操作算法适当加以补充,实现向一个有序的(非递减)的顺序表中插入数据元素e算法。
void SeqList::Insert1(const DataType& e)
{
int count=;
for(int i=;i<size;i++)
{
if(e>list[i-]&&e<list[i])
count=i;
}
Insert(e,count);
}
(15)用算法实现将线性表循环右移k位。(m=k%L.length,每次取最后一个元素,插入到第1个位置,做m次)
void SeqList::turnright(int k)
{
int count=;
int c=size;
for(int j=size;j>;j--)
{
list[j+k]=list[j]; count++;
}
size=size+k;
for(int j=;j<count;j++)
list[j]=;
for(int m=,f=size;m<k%c+;m++,f--)
{
Insert(list[f],m);
}
}
c++实验2 顺序存储线性表的更多相关文章
- 顺序存储线性表_ArrayList
相信大家在日常开发过程中 List 应该使用的非常非常多,今天就来简单学习一下 List 的数据结构 顺序存储线性表. 一.什么是顺序存储线性表 顺序存储线性表是最基本.最简单.也是最常用的一种数据结 ...
- 算法与数据结构(一) 线性表的顺序存储与链式存储(Swift版)
温故而知新,在接下来的几篇博客中,将会系统的对数据结构的相关内容进行回顾并总结.数据结构乃编程的基础呢,还是要不时拿出来翻一翻回顾一下.当然数据结构相关博客中我们以Swift语言来实现.因为Swift ...
- 第2章 线性表《C#数据结构和算法》
( )除第一个位置的数据 元素外,其它数据元素位置的前面都只有一个数据元素:( )除最后一个位置的 数据元素外,其它数据元素位置的后面都只有一个元素.也就是说,数据元素是 一个接一个的排列.因此,可以 ...
- [从今天开始修炼数据结构]线性表及其实现以及实现有Itertor的ArrayList和LinkedList
一.线性表 1,什么是线性表 线性表就是零个或多个数据元素的有限序列.线性表中的每个元素只能有零个或一个前驱元素,零个或一个后继元素.在较复杂的线性表中,一个数据元素可以由若干个数据项组成.比如牵手排 ...
- 2.2_线性表的顺序存储结构_参考集合ArrayList
[线性表的顺序存储从结构] 指的是用一段连续的存储单元一次储存线性表的数据元素. [线性表的顺序存储的结构代码 C语言版] #define MAXSIZE 20 /*存储空间初始分配量*/ typed ...
- C 数据结构1——线性表分析(顺序存储、链式存储)
之前是由于学校工作室招新,跟着大伙工作室招新训练营学习数据结构,那个时候,纯碎是小白(至少比现在白很多)那个时候,学习数据结构,真的是一脸茫然,虽然写出来了,但真的不知道在干嘛.调试过程中,各种bug ...
- 线性表之顺序存储结构(C语言动态数组实现)
线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链 ...
- 线性表的顺序存储结构——java
线性表的顺序存储结构:是指用一组地址连续的存储单元一次存放线性表的元素.为了使用顺序结构实现线性表,程序通常会采用数组来保存线性中的元素,是一种随机存储的数据结构,适合随机访问.java中ArrayL ...
- [置顶] ※数据结构※→☆线性表结构(queue)☆============队列 顺序存储结构(queue sequence)(八)
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的 ...
随机推荐
- ARM-Linux移植之(四)——根文件系统构建
相关工具版本: busybox-1.7.0 arm-linux-4.3.2 linux-2.6.22 1.配置busybox并安装. 在我们的根文件系统中的/bin和/sbin目录下有各种命令的应 ...
- Mysql提权
获取最高用户root的密码 获取方式:数据库配置文件.端口破解口令.下载数据库文件获取等1.数据库配置文件config,conn,data,sql,include,common,inc等命名文件2.数 ...
- DDD学习笔录——提炼问题域之与领域专家一起获得领域见解
业务和开发团队之间的协作是DDD必不可少的部分,并且它是处于开发阶段的产品获得成功的关键. 领域专家指的是那些从业务领域的政策和工作流程到棘手处和特性都具有深刻理解的人.能够为你的问题区域提供深刻见解 ...
- JS播放声音 兼容所有浏览器
JS播放声音 兼容所有浏览器 <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http ...
- LCD 调试总结
转自:http://blog.csdn.net/qikaibinglan/article/details/5630246 (1) 液晶显示模式 并行:MCU接口.RGB接口.Vysnc接口 串行:SP ...
- grep家族
grep家族由命令grep.egrep和fgrep组成. grep:在文件中全局查找指定的正则表达式,并且打印所有包含该表达式的行.egrep和fgrep是grep的变体.egrep:grep的扩展, ...
- C程序栈内存堆内存的地址
#include <stdio.h> #include <malloc.h> int main() { char * p1, * p2; p1=(char *)malloc(2 ...
- 【原创】12. MYSQL++之Template Query
1. 什么是Template Query 在我们实际的编程过程中,我们很容易碰到printf这类需要在运行时来决定到底打印出什么的函数,例如 printf(“hello %s”, sth); 在这个例 ...
- solr4.3+tomcat入门部署
solr4.3的入门配置 目前阿帕奇官方仅推荐2个比较稳定的版本一个是4.3的版本,一个3.6的版本 3.6的版本没有用过,所以在此无涉及,下面就来说说solr4.3的入门配置 s ...
- 十二.filter
Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是 ...