线性表顺序存储结构的构建
**************************************************************************************************做了一些优化,可能不是最优;请评论区提出一些更好的想法
***************************************************************************************************
#include<iostream>
#include<stdlib.h>
using namespace std;
#define MAXSIZE 20
typedef int ElemType;
typedef int Status;//不用ElemType作为函数的返回类型,原因是ElemType会变,所以重新定义
typedef struct
{
ElemType data;//线性表的最大容量//不同语言可以动态扩容
int length;//线性表的当前长度
}sqList;
Status InitList(sqList *L)
{
L=(sqList *)malloc(sizeof(sqList));
L->length=0;
}
Status ListEmpty(sqList L)
{
if(L.length>0)
return true;
else
return false;
}
void DestroyList(sqList *L)
{
free(L);
cout<<"线性表被释放";
cout<<"线性表的当前长度为:"<<L->length<<endl;
}
Status GetElem(sqList L,int i,ElemType*e)
{
if(L.length==0||i<1||i>L.length)
{
return 0;
}
else
{
*e=L.data;
return 1;
}
}
Status LocateElem(sqList L,ElemType e)
{
for(int i=1;i<=L.length;i++)
{
int counts=0;
if(L.data==e)
{
cout<<"元素找到在第"<<i<<"位"<<endl;
return i;
}
else
{
counts++;
if(counts==L.length)
{
cout<<"要查找的数据不在该表中"<<endl;
return 0;
}
}
}
}
Status ListInsert(sqList *L,int i,ElemType e)
{
if(L->length>=MAXSIZE)
{
cout<<"线性表长度超出最大长度"<<endl;
return 0;
}
else if(i<1||i>L->length)
{
cout<<"插入位置错误"<<endl;
return 0;
}
else if(i<L->length)
{
for(int k=L->length;k>=i;k--)
{
L->data=L->data;
}
L->data=e;
L->length++;
}
return 1;
}
Status ListDelete(sqList *L,int i,ElemType *e)
{
if(L->length<=0)
{
cout<<"Error:线性表为空"<<endl;
return 0;
}
else if(i<0||i>L->length)
{
cout<<"Error:删除位置不在该线性表中"<<endl;
return 0;
}
else if(i>0&&i<=L->length)
{
for(int k=i;k<L->length;k++)//最后的元素依然存在,只不过长度-1
{
L->data=L->data;
}
L->length--;
return 1;
}
}
Status ListLenth(sqList L)
{
return L.length;
}
void PrintfList(sqList L)
{
for(int i=1;i<=L.length;i++)
{
cout<<L.data<<" ";
}
cout<<endl;
}
int main()
{
sqList L;
InitList(&L);
ElemType e;
int i=0;
cout<<"请输入线性表的长度"<<endl;
cin>>L.length;
cout<<"输入顺序的元素:"<<endl;
for(int i=1;i<=L.length;i++)//从1开始,让人读的程序,因为我们正常的习惯就是从1开始
{
cin>>L.data;
}
cout<<"请输入要查找的数据:"<<endl;
cin>>e;
LocateElem(L,e);
//********************
cout<<"请输入要插入的数据e,输入插入的位置i:"<<endl;
cin>>e>>i;
ListInsert(&L,i,e);
cout<<"线性表当前长度为:"<<ListLenth(L)<<endl;
PrintfList(L);
//*******************
cout<<"请输入要删除的位置i:"<<endl;
cin>>i;
ListDelete(&L,i,&e);
PrintfList(L);
cout<<"线性表当前长度为:"<<ListLenth(L)<<endl;
//******************
DestroyList(&L);
}
斜体的有些失误
页:
[1]