#include"iostream"
using namespace std;
struct List{
int *list; //存线性表元素的动态存储空间的指针
int size; //存线性表长度
int maxsize; //规定list数组的长度
};
void init_list(List &l) //初始化线性表
{
l.maxsize=6; //初始定义数组长度
l.list=new int[l.maxsize]; //动态存储空间分配
if(l.list==NULL)
{
cout<<"动态可分配的存储空间已用完,退出运行!"<<endl;
exit(1);
}
l.size=0; //置线性表长度为0,即为空表
}
void clear_list(List &l) //清空线性表
{
if(l.list!=NULL)
{
delete []l.list;
l.list=NULL;
}
l.maxsize=0;
l.size=0;
}
int length_list(List &l) //获取线性表的长度
{
return l.size;
}
bool empty_list(List &l) //检查线性表是否为空
{
return l.size==0;
}
int get_list(List &l,int pos) //获取线性表中指定位置的元素
{
if(pos<1 ||pos>l.size) //若pos越界则退出
{
cout<<"pos is out range!"<<endl;
exit(1);
}
return l.list[pos-1]; //返回线性表中第pos个元素的值
}
void traverse_list(List &l) //遍历线性表中的元素,若遍历记录类型,则需要重插入操作符
{
for(int i=0;i<l.size;i++)
{
if(i!=(l.size-1))
cout<<l.list[i]<<" ";
else
cout<<l.list[i]<<endl;
}
}
void findpoint_list(List &l,int item) //返回查找的位置
{
for(int i=0;i<l.size;i++)
{
if(l.list[i]==item)
{
item=l.list[i];
cout<<"你查找的元素的位置序号为:"<<i+1<<endl;
}
}
}
bool insert_list(List &l,int item,int pos) //向线性表中指定的位置插入元素
{
if(pos<1||pos>l.size+1) // 先检查pos的位置是否有效
cout<<"pos值无效"<<endl;
int j;
if(l.size<=l.maxsize) //表示线性表的存储空间已经用完了
{
int k=sizeof(int); //计算每个存储空间的长度
l.list=(int *)realloc(l.list,2*l.maxsize*k); //扩展空间
if(l.list==NULL)
{
cout<<"动态可分配的存储空间用完"<<endl;
exit(1);
}
l.maxsize=2*l.maxsize;
}
for(j=l.size-1;j>=pos-1;j--) //等插入元素的位置及所有后续元素位置都依次后移一个位置
l.list[j+1]=l.list[j];
l.list[pos-1]=item; //将等插入的元素插入已经空下的位置
l.size++; //表长度加1
return true;
}
bool delete_list(List &l,int pos) //从线性表中删除指定位置元素
{
if(l.size==0)
{
cout<<"线性表为空"<<endl;
return false;
}
if(pos<1 ||pos>l.size+1)
cout<<"pos值无效"<<endl;
//进行删除操作
int k=0;
for(k=pos-1;k<l.size;k++)
l.list[k]=l.list[k+1];
l.size--;
return true;
}
void buffersort_list(List &l) //冒泡排序
{
for(int a=0;a<l.size-1;a++)
{
for(int b=0;b<l.size-a-1;b++)
{
if(l.list[b]>l.list[b+1])
{
int temp=l.list[b+1];
l.list[b+1]=l.list[b];
l.list[b]=temp;
}
}
}
}
void main()
{
int a[6];
int i,x;
cout<<"请输入线性表的6个正整数元素:";
for(int j=0;j<6;j++)
cin>>a[j];
cout<<endl;
List list;
init_list(list); //初始化List
for(i=0;i<6;i++)
insert_list(list,a[i],i+1); //将数组插入到线性表中
cout<<"遍历新插入的线性表的元素:";
traverse_list(list); //遍历线性表
findpoint_list(list,11); //查找指定位置的元素
cout<<"获取指定位置的元素值为:"<<get_list(list,3)<<endl; //获取指定位置的元素值
cout<<"获取线性表的长度为:"<<length_list(list)<<endl; //获取线性表的长度
buffersort_list(list); //对线性表进行排序
cout<<"对线性表排序后的结果为:";
traverse_list(list);
cout<<"删除指定Pos位置的元素:"<<delete_list(list,3)<<endl; //删除指定位置上的元素
traverse_list(list);
}
线性表
最新推荐文章于 2024-08-15 22:47:52 发布