顺序表:以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。
问题:向一个递增的线性表插入一个元素x,使其仍然递增
#include<stdio.h>
#define size 100
typedef struct
{
int data[size];
int length;//用来存储表的长度,到时候直接用
}sqlist;
int LocateElem(sqlist L,int x)//查找元素
{
int i;
for(i=0;i<L.length;i++)//这一个递增线性表,从0开始比较,则i对于的值一定是第一个大于x的值,把x插在这个值的前面就解决了问题
{
if(x<L.data[i])
{
return i;//返回对应值的下标
}
}
return 0;
}
int insert(sqlist &L,int x)//由于要对线性表进行修改,则要用&
{
int p,i;
p=LocateElem(L,x);//把返回值i赋给p
for(i=L.length-1;p<=i;--i)//从尾端开始移动,避免了覆盖的问题。则--i使i越来越小,其中找到的p下标对应的值也应该移动,所以p<=i,因为那个值使大于x的
{
L.data[i+1]=L.data[i];//将值转移到移动后的地方
}
L.data[p]=x;//刚好p下标来填x
++(L.length);//由于增加了一个元素,则线性表的长度加1
return 0;
}
int main()
{
sqlist sqlist={{1,3,6,9},4};//初始化线性表
insert(sqlist,2);
for(int i=0;i<sqlist.length;i++)
{
printf("%d\n",sqlist.data[i]);//打印线性表
}
return 0;
}
打印:1
2
3
6
9
问题:删除下标为p对应的值,并把对应的值赋给e
#include<stdio.h>
#define size 100
typedef struct
{
int data[size];
int length;
}sqlist;
int DeleteElem(sqlist &L,int x,int &e)
{
if(x<0||x>=L.length) return 0;//判断x的值是否有效
int p,i;
p=x;
e=L.data[x];
for(i=p+1;i<=L.length;i++)//左移
{
L.data[i-1]=L.data[i];
}
--(L.length);
return e;
}
int main()
{
int e;
sqlist sqlist1={{1,3,6,9},4};
e=DeleteElem(sqlist1,2,e);
printf("%d\n",e);
for(int i=0;i<sqlist1.length;i++)
{
printf("%d\n",sqlist1.data[i]);
}
return 0;
}
打印:6
1
3
9