线性表
概念:线性表是一个有限序列,各个表项相继排列,第一个为表头,最后一个是表尾,且每两个相邻项之间有前驱和后继的关系。
线性表分为有序线性表和无序线性表。
1.顺序表的存储单元
L | a1 | a2 | ... | ai | ... | an |
| 0 | 1 |
| i-1 |
| n-1 |
线性表L
代码实现存储结构的创建
#define MaxSize 100 // 声明最大空间100
typedef int DataType; //类型定义
typedef struct //定义结构体
{
DataType data[MaxSize];
int length;
}SqList; //结构体名称
void Creat_List(SqList *L, int n) //创建线性表
{
int i = 0;
for(i=0; i < n; i++)
scanf("%d",&L->data[i]);
L->length = n;
}
2.线性表的插入
由于在i位置插入x,导致i位置之后所有的数字都要向后移动一个位置,i位置前面的位置都不移动。
程序设计思路:
1.先判断顺序表是否满,插入的位置是否正确
2.在插入之前,先给x空出位置,也就是说把an—ai元素依次往后移动。
3.将x插入空出来的位置上
4.线性表的长度增加1.
代码实现:
SqList Insert_List(SqList L,int i,DataType x)
{
int j;
if(L.length == MaxSize)
printf("FULL\n");
else if(i < 1 || i>L.length+1)
printf("FILLE\n");
else
{
for(j = L.length-1;j>= i-1;j--)
L.data[j+1] = L.data[j];
L.data[i-1] = x;
L.length++;
}
return L;
}
3.线性表的删除
由于在i位置删除ai,导致i位置之后所有的数字都要向前移动一个位置,i位置前面的位置都不移动。
程序设计思路:
1.判断所删除的元素是否在范围之内
2.将该位置上的值删除
3.将该值删除之后,从最后一个元素开始,依次往前移动
4.线性表的长度减一。
代码实现:
Remove_List(SqList L,int i)
{
int j;
if(i <1 || i>L.length)
printf("WRONF!!");
else
{
for(j=i;j<=L.length-1;j++)
L.data[j-1] = L.data[j];
L.length--;
}
return 0;
}