线性储存结构
数据长度与线性表的长度区别
1.数组
数组的长度是存放在线性表的存储空间的长度,存储分配后这个量一般是不变的。
2.线性表
线性表的长度是线性表中数据元素的个数,随着线性表插入和删除操作的进行,这个量是变化的。
下面看一下顺序存储结构的插入与删除
插入操作
插入算法思路
- 如果插入位置不合理,抛出异常;
- 如果线性表长度大于等于数组长度,则抛出异常或动态增加常量;
- 从后面一个元素开始向前面历到第i个位置,分别将它们都向后移动一个位置;
- 将要插入元素填入位置i处
- 表长加1(暂时未加)
//1.数组,2.位置,3.需要插入的数字
//插入数据方法
public static boolean chaRu(int[] shu,int i,int cha)
{
if(shu[shu.length-1]!=0)//判断是否最后一个数字有没有存储数据
{
System.out.println("位置以满");
return false;
}
if(i<1 || i>shu.length)//判断i的为位置是否在数组之内
{
System.out.println("你选择的位置不在队伍之中");
return false;
}
if(i<shu.length)//若插入数据位置表尾
{
for(int k=shu.length-2;k>=i-1;k--)//循环把需要的插入位置往后输入
{
shu[k+1]=shu[k];
}
}
shu[i-1]=cha;//腾出来的位置导入需要插入的数字
for(int k=0;k<shu.length;k++)//循环读取数据
{
System.out.print(shu[k]);
}
System.out.println();
return true;
}
删除操作
删除算法思路
- 如果删除位置不合理,抛出异常;
- 取出删除元素
- 从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置;
- 表长减1(暂时未加);
//1.数组,2.位置,3.反出被删除的数字
//删除数据的方法
public static boolean sanChu(int[]shu,int i,int san)
{
if(shu.length==0)//判断这个线性表是否为空
{
System.out.println("数组为空");
return false;
}
if(i<0||i>shu.length-1)//判断删除位置是不是正确的
{
System.out.println("选择删除的位置不正确");
return false;
}
san=shu[i-1];//把删除的值返回来
if(i<shu.length-1)//判断删除的是不是最后一个
{
for(int k=i;k<shu.length;k++)
{
shu[k-1]=shu[k];//把位置都往前挪一个
}
shu[shu.length-1]=0;//最后一个数组的值归零
}else
{
shu[shu.length-1]=0;//最后一个数组的值直接归零
}
for(int k=0;k<shu.length;k++)//循环读取数据
{
System.out.print(shu[k]);
}
System.out.println();
return true;
}