线性表(Linear List)由同类型数据元素构成有序序列的线性结构
表中元素个数称表的长度;
数据对象集:n个元素构成的有序序列
操作集:
1.创建一个空表
2.根据位序K,返回对应元素(查找)
3.在位序i前插入一个元素x
4.删除位序i的元素
5.返回顺序表的长度L
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
typedef struct LNode* List;
struct LNode{
int data[MAX];
int last;
};
//创建空顺序表
List Make_NewList(){
List PtrL;
PtrL=(List)malloc(sizeof(struct LNode));
PtrL->last=-1;
return PtrL;
}
void Length(List PtrL){
printf("%d",PtrL->last);
}
//查找
int Find(int x,List PtrL){
int i=0;
while(i<=PtrL->last&&PtrL->data[i]!=x) i++;
if(i>PtrL->last){
return -1;
}//没找到,返回-1;
else{
return i;
}//找到了,返回i;
}
//插入
void Insert(int x,int i,List PtrL){
if(PtrL->last==MAX-1){
return ;//表满了,无法插入
}
if(i<1||i>PtrL->last+2){
return ;//插入位置不合法,无法插入
}
int j;
//先将i之后的元素全部后移,为x的插入腾出空间
for(j=PtrL->last;j>=i-1;j--){
PtrL->data[j+1]=PtrL->data[j];
}
PtrL->data[i-1]=x;//插入
PtrL->last++;//更新顺序表结尾
}
//删除
void Delete(int i,List PtrL){
if(i<1||i>PtrL->last+1){
return ;//位置不合法,无法删除
}
int j;
//将i+1到结尾的元素全部前移,直接覆盖第i个元素
for(j=i;j<=PtrL->last;j++){
PtrL->data[j-1]=PtrL->data[j];
}
PtrL->last--;//更新顺序表结尾
}
void Print(List PtrL){
for(int i=0;i<PtrL->last;i++){
printf("%d ",PtrL->data[i]);
}
}