简单顺序表的创建(C++类的封装)
★顺序表是在数组的基础上储存数据的一种方式,数组虽然有删除、查找、插入等基本操作,但没有相应的基本运算符或基本操作函数。
(ps:基本运算符有:关系运算符、逻辑运算符、三目运算符、
位运算符、类型转换(强制性更改数据类型))
话不多说,直接看代码以及相应注解
#include<iostream>
#include<cstdlib>
//包含malloc函数
using namespace std;
typedef int Type;
/*最基本的顺序表具有三个数据信息
1.Type类型(不明类型指针,指向一个动态数组)
2.自定义数组能储存的数据个数
3.数组的容量 (容量大于等于数据个数)
*/
class SeqList
{
//成员声明
public:
Type * data;//Type具体应用时要提前赋予其一个类型
int size;
int max;
//其他应用的成员函数声明
SeqList(int n)//带参构造函数进行成员初始化
{
data=(Type*)malloc(n*sizeof(Type));
if(data==NULL)
{
cout<<"空间分配失败!"<<endl;//空间分配失败的提示
exit(1);
/*
exit(0):正常运行程序并退出程序;
exit(1):非正常运行导致退出程序;
return :返回函数,若在主函数中,则会退出函数并返回一值。
*/
}
size=0;
max=n;
}
~SeqList();//析构函数撤销动态数组空间
void InsertRear(Type item);//尾插,即在顺序表尾部加上数据
void Insert(int id,Type item);//定点插入,即指定位置插入数据
void Erase(int id);//定点删除,将下标为id的数据删除
void Clear();//清表,即清空表内所有数据
Type Getdata(int id);//取值,读取下标为id的数据
int Size();//取数据个数,读取size的值
int Empty();//判断是否为空表
int Full();//判断是否为满表
};
//成员函数的定义
//!!!一定不要忘记了作用域!!!
//析构函数
SeqList::~SeqList()
{
free(data);
}
//尾插,即在顺序表尾部加上数据
void SeqList::InsertRear(Type item)
{
if(size==max)
{
cout<<"表已满!"<<endl;
exit(1);
}
data[size]=item;
size++;//最后一个为NULL
}
//定点插入,即指定位置插入数据
//原理是将从最后一位到指定的位置的数据全部在、向后移一位,为加入的数据提供空间
void SeqList::Insert(int id,Type item)
{
if(id<0||id>size||size==max)
{
cout<<"输入了不合理的下标或者表已满!"<<endl;
exit(1);
}
for(int i=size;i>=id;--i)
data[i+1]=data[i];
data[id]=item;
size++;
}
//定点删除,将下标为id的数据删除
void SeqList::Erase(int id)
{
if(id<0||id>size-1)
{
cout<<"输入了不合理的下标或者表已空!"<<endl;
exit(1);
}
for(int i=id+1;i<size;++i)
data[i-1]=data[i];
size--;
}
//清表,即清空表内所有数据
void SeqList::Clear()
{
size=0;//计算机内的数据并不是物理性的清除,而是从逻辑上的,零数据个数为零,即清空了数据
}
//取值,读取下标为id的数据
Type SeqList::Getdata(int id)
{
if(id<0||id>size-1)
{
cout<<"输入不合理下标或者表已空!"<<endl;
exit(1);
}
return data[id];
}
//取数据个数,读取size的值
int SeqList::Size()
{
return size;
}
//判断是否为空表
int SeqList::Empty()
{
return size==0;
}
//判断是否为满表
int SeqList::Full()
{
return size==max;
}
int main()
{
int n;
SeqList L(10);//建立一个顺序表
L.InsertRear(5);
L.InsertRear(15);
L.InsertRear(20);
L.Insert(1,10);
L.Erase(0);
n=L.Size();
for(int i=0;i<n-1;i++)
cout<<L.Getdata(i)<<"->";
cout<<L.Getdata(n-1)<<endl;
L.Clear();
return 0;
}
对你有帮助的话点个赞支持一下吧~~