基于C++的数据结构——顺序表

来源:互联网 发布:男内裤淘宝买家秀图 编辑:程序博客网 时间:2024/06/03 17:05

这学期在学习数据结构,就开始写y一些关于数据结构的相关知识吧

今天说的是顺序表

首先,顺序表,顾名思义是顺序的表,这里的顺序指的是存储的数据在物理结构上是连续的,也就是数据存储时在实际的内存上是连续存储的。因为顺序表在物理空间上是连续的一片内存,故此在读取数据时时候可以达到随机存取的特点(随机存取指的是可以快速查找而不是随机插入和删除,本人刚学的时候总是弄混),所以当存储需要快速查找的数据时,可以考虑使用顺序表。

然后,开始创建简单的顺序表,并实现一些基本的数据操作。由于顺序表的物理结构是连续的,故此在创建顺序表时,不可置否的想到了数组,用一个大小固定的数组来创建顺序表(这里就是顺序表的一个缺点:创建顺序表的同时需要规定其大小,这就导致如果小了出现表满的情况,而表大了,就容易导致存储空间的浪费)。

其次,顺序表的基本操作有如下

1:创建顺序表并初始化

由上文已经可以知道,顺序表是用一个数组来创建表的容量,但是我们还需要知道表中的元素个数以及是否表满,所以在创建声明一个数组的同时,我们还需要定义一个整型数据,始终指向表中的最后一个元素来确定表长,是否表满等信息。当刚刚创建表时由于表中没有元素,所以我们将整型变量声明为-1。故此,在顺序表的创建和初始化中,我们需要做的就是,定义一个数组a[max],以及一个始终指向表中最后一个元素的变量last,并将last赋值为-1。

2:顺序表的插入和删除

创建了表后,我们相应的需要做的就是对表进行基本的插入以及删除,在插入算法中,由于顺序表的物理结构,所以当我们想在表中插入一个元素时,我们需要将插入位置后的所有元素的存储位置都向后移一位。同理,删除操作时,我们需要将删除位置后的所有元素都向前移一位。

3:顺序表的按值查找

顺序表的按值查找有很多种查找,如二分查找,等等,这里仅仅说最简单的顺序查找。所谓顺序查找就是从顺序表的第一个元素开始遍历整个顺序表直到找到查找的值。

#include<iostream>using namespace std;template<typename DataType,int Maxsize>class SeqList{    private:        DataType data[Maxsize];        int last;    public:        SeqList();        ~SeqList();        int Insert_SeqList(int i,DataType d);        int Delete_SeqList(int i);        int Location_SeqList(DataType d);    };void *SeqList<DataType,Maxsize>::SeqList()/*通过修改最后元素位置的LAST的值初始化顺序表,也就是对类模版中的构造函数SeqList() 的实例化。由于创建的是顺序表L为指针参数,所以在实例化的同时,在*/ {    last=-1;    } int SeqList<DataType,Maxsize>::Insert_SeqList(int i,DataType d){    if(last==Maxsize-1)//判断顺序表是否有剩余空间     return 0;    if(i<1||i>last+2)//判断所插入位置是否正确     return 0;           for(int j=last;j<=i-1;j--)//将第I个元素换成第i个元素所在数组的下表,从最后新增的数组空间开始替换,所以J为变量控制循环     data[j+1]=data[j];    data[i-1]=d;    last++;//更改顺序表最后元素位置的数组下标     return 1;    }int SeqList<DataType,Maxsize>::Delete_SeqList(int i){    if(i<1||i>last+1)    return 0;    for(int j=last;i-1<=j;i++)    data[i]=data[i-1];    last--;    return 1;    }int SeqList<DataType,Maxsize>::Location_SeqList(DataType d){    int j=1;    for(int i=0;i<=last;i++)    {        if(data[i]==x)        {            j=0;            return i+1;        }        if(j)        return -1;    }int main(){    SeqList <int,10> L;    int choose,juicp=0,loc;    cin>>choose;    if(choose>3||choose||<1)    cout<<"error";    else    switch(choose)    case '1':        {            juicp=L.Insert_SeqList();            if(juicp)            cout<<"OK";            break;             }    case '2':{            juicp=L.Insert_SeqList();            if(juicp)            cout<<"OK";            break;             }    case '3'{            loc=L.Location_Seqlist();            if(loca=-1)            cout<<"error";            else            cout<<loc;            break;            }       return 0;                    }    

(PS:顺序表很简单,但顺序表是最基本的数据结构之一。虽然单一使用顺序表的情况很少,但很多情况下都是通过结构体来定义顺序表的数据元素,将顺序表与接下来会说的链表结合,形成各种全新的较为复杂的数据结构。)

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 厕所堵了怎么办有妙招 蹲式厕所老是堵怎么办 下蹲式厕所堵了怎么办 蹲的厕所堵住了怎么办 厕所通了又堵怎么办 蹲式厕所经常堵怎么办 厕所下水管堵了怎么办 厕所堵了水满了怎么办 拉屎把厕所堵了怎么办 厕所堵了不下水怎么办 坐厕所堵了怎么办妙招 火车上丢了东西怎么办 网购的东西丢了怎么办 在酒店丢了东西怎么办 我好懒不想工作怎么办 被宠物刺猬咬了怎么办 被老鼠咬了怎么办打针 手指被老鼠咬了怎么办 孕妇被老鼠咬了怎么办 耳朵里面一直嗡嗡响怎么办 把语言栏删了怎么办 乐视会员到期了怎么办 预提费用取消了怎么办 小学生上课注意力不集中怎么办 工商抽查到你了怎么办 拿到商调函后该怎么办 苹果7p掉水里了怎么办 苹果7屏幕进水了怎么办 苹果5s掉进水里怎么办 苹果5s无法开机怎么办 苹果手机充不了电怎么办 苹果5s掉了怎么办 苹果6手机掉水里了怎么办 苹果5s关机丢了怎么办 苹果5s发热严重怎么办 手机开不开机了怎么办 苹果6基带坏了怎么办 苹果7基带坏了怎么办 苹果刷机1错误怎么办 4s解锁密码忘了怎么办 4sid密码忘记了怎么办