*因借用C++引用语法,主体代码以C++为主,提及C语言
目录
顺序表的定义
静态分配
#define MaxSize 50//定义顺序表的最大长度
typedef struct{
ElemType data[MaxSize];//顺序表中的元素 (a[1],a[2],a[3]……a[n])
int length;//当前顺序表中有多少个元素(n)
}SqList;//顺序表的类型定义(顺序表的别名)
动态分配
#define InitSize 100//定义表的初始最大长度
typedef struct{
ElemType *data;//动态分配数组的指针
int capacity;//动态数组的最大容量
int length;//动态数组的当前个数
}SeqList;//顺序表的类型定义(顺序表的别名)
C动态初始分配语句为
L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);
C++动态初始分配语句为
L.data=new ElemType[InitSize];
顺序表的插入操作
插入函数
bool ListInsert(SqList &L,int i,ElemType e)//在判断插入是否合法后,实现插入操作
//L为被插入顺序表,i代表插入的位置(从1开始计数),e为要插入的元素
{
if(i<1||i>L.length+1)//判断要插入的位置是否合法
return false;//如果不合法,返回错误
if(L.length>=MaxSize)//判断存储空间是否已满
return false;//如果已满,返回错误
for(int j=L.length;j>=i;j--)//从顺序表尾元素开始向后移动一位,直到移完i位置结束移动
L.data[j]=L.data[j-1];
L.data[i-1]=e;//在i位置放入e元素(数组下标从零开始)
L.length++;//插入完元素后,顺序表长度加1
return true;//插入成功,返回正确
}
插入实现
ret=ListInsert(L,i,e);//在表L中i位置插入e元素,并用ret判断是否报错
if(ret)
{
printf("插入成功\n");
PrintList(L);//打印插入成功后的表L
}
else
{
printf("插入失败\n");
}
顺序表的删除操作
删除函数
bool ListDelete(SqList &L,int i,ElemType &e)//判断删除是否合法后,实现删除操作并读取被删除元素
//L为被删减顺序表,i代表删除的位置(从1开始计数),e为被删除的元素
{
if(i<1||i>L.length)//判断要删除的位置是否合法
return false;//如果不合法,返回错误
e=L.data[i-1];//获取被删除的元素(数组下标从零开始)
for(int j=i;j<L.length;j++)//从i元素开始向前移动一位,移完结束移动
L.data[j-1]=L.data[j];
L.length--;//删除完元素后,顺序表长度加1
return true;//删除成功,返回正确
}
删除实现
ret=ListDelete(L,i,del);//删除表L中i位置del元素且获取del,并用ret判断是否报错
if(ret)
{
printf("删除成功\n");
printf("删除元素值为 %d\n",del);//打印被删除的del元素
PrintList(L);//打印删除成功后的表L
}
else
{
printf("删除失败\n");
}
顺序表的查找操作
查找函数
int LocateElem(SqList L,ElemType e)//查找成功,返回位置,查找失败,返回0
//L为查找顺序表,e为被查找的元素
{
int i;
for(i=0;i<L.length;i++)//从头遍历全表查找元素
if(L.data[i]==e)//i处元素为查找元素e
return i+1;//返回元素在顺序表中的位置(数组下标从零开始,需返回i+1值)
return 0;//退出循环即为查找失败,返回0
}
查找实现
ret=LocateElem(L,e);//查找表L中e元素,并用ret判断是否报错
if(ret)
{
printf("查找成功\n");
printf("元素位置为 %d\n",ret);//打印e元素所在位置
}
else
{
printf("查找失败\n");
}
顺序表的打印操作
打印函数
void PrintList(SqList &L)//打印顺序表L
{
for(int i=0;i<L.length;i++)//以每个元素四个空格大小输出表中数据
{
printf("%4d",L.data[i]);
}
printf("\n");
}
打印实现
PrintList(L);