示例:
#include <stdio.h>
#define Maxsize 50
typedef int ElemType; //为了方便后续可以修改直接修改类型(存储其他元素时)
typedef struct {
ElemType data[Maxsize];
int len; //长度
}SqList; //顺序表变量
//顺序表插入,L要改变,所以这里用 引用&
bool ListInert(SqList &L,int i,ElemType e) //顺序表,位置,元素
{
//判断 i 是否合法(可以插首头第一个、尾巴后面)
if(i<1 || i>L.len+1)
{
return false;
}
//判断空间是否为满
if(L.len >= Maxsize)
{
return false;
}
//插入第i个位置,并把后面的元素往后移,从后往前移注意不要覆盖前元素故 j--
for(int j=L.len; j>=i ;j--)
{
L.data[j]=L.data[j-1];
}
L.data[i-1]=e; //放入插入的元素
L.len ++;
return true;
}
//打印顺序表 循环遍历 不需要改变L,故不用加引用 &
void Printlist(SqList L)
{
for (int i = 0; i < L.len; i++)
{
printf("%3d",L.data[i]);
}
}
//删除顺序表中的元素,删除会改变主函数里的del所以要加引用 &
bool ListDelete(SqList &L,int i,ElemType &e) //顺序表,位置,获取被删除的元素的值
{
//删除的i的位置是否合法
if(i<1 || i>L.len)
{return false;}
e=L.data[i-1]; //保存要删除的值
for (int j = i; j <L.len ; j++) //往前移动元素
{
L.data[j-1]=L.data[j];
}
L.len--;
return true;
}
//查找某个元素的位置,找到了就会返回对应的位置,没找到就返回0。
// 只是读取数据,没有改变顺序表,也没有改变元素的值,故不用引用&
int LocateElem(SqList L,ElemType e)
{
for (int i = 0; i < L.len; i++)
{
if(e==L.data[i])
{
return i+1; //i是数组的下标,+1才是顺序表的下标
}
}
return 0;
}
int main()
{
SqList L; //顺序表
bool ret; //ret 用来装函数的返回值
L.data[0]=1;
L.data[1]=2;
L.data[2]=3;
L.len=3; //顺序表长度
//插入
ret=ListInert( L,2,60);
if(ret == true) //可以不写(ret == true),单独写(ret),true可以省略
{
printf("insert sqlist success\n");
Printlist(L);
}else{
printf("insert sqlist failed\n");
}
printf("\n");
//删除
ElemType del;
ret = ListDelete(L,1,del);
if(ret)
{
printf("delete sqlist success\n");
}else{
printf("delete sqlist failed\n");
}
//按值查找
int pos;
pos=LocateElem(L,60);
if(pos)
{
printf("find this element\n");
printf("element pos=%d\n",pos);
}else{
printf("don't find this element\n");
}
return 0;
}
运行结果: