c语言的线性表的顺序存储的实现,数组

线性表分为顺序表和链式表


#include

#define MaxSize 100        //定义元素的大小
typedef int DataType;        //定义一个类型
typedef struct{     //定义一个结构体
  DataType list[MaxSize];
  int size;             //结构体元素的大小
}SeqList;                 //结构体的对象


//初始化
void initiate(SeqList *L){
      L->size=0;//定义初始化元素个数
}


//求当前元素的个数
int getLength(SeqList L){


return L.size;//返回长度
}


//插入数据元素
int insertData(SeqList *L,int i,DataType x){
//在顺序表L的第i(0<=i<=size)个位置前插入数据元素x
//插入成功返回1,出人失败返回0
   int j;
   if(L->size>=MaxSize){
      printf("顺序表已满,无法插入!!\n");
 return 0;
   }else if(i<0||i>L->size){
      printf("插入的位置不合法,不在指定的范围,参数i不合法!\n");
 return 0;
   }else{
      //从后向前一致移动数据,为插入做准备
  for(j=L->size;j>i;j--){
        L->list[j]=L->list[j-1];
  }
       L->list[i]=x;
  L->size++;
  return 1;
   }
}


//删除数据
int deleteData(SeqList *L,int i,DataType *x){ 
    //删除顺序表中位置为i的数据i>=0&&i<=size-1,把数据保存到x中
//删除成功返回1,否则返回0
int j;
if(L->size<=0){
   printf("顺序表已空无数据元素可删!\n");
return 0;
}else if(i<0||i>L->size-1){
   printf("参数i不合法,不能删除!\n");
return 0;
}else{
*x=L->list[i];
for(j=i+1;j<=L->size-1;j++){//从前往后一次前移
    L->list[j-1]=L->list[j];
}
L->size--;//数据元素减一
return 1;
}
}


//取出数据元素
int getData(SeqList L,int i,DataType *x){
    if(i<0||i>L.size-1){
printf("参数i不合法,不能删除!\n");
return 0;
}else{
   *x=L.list[i];
return 1;
}
}
int main(){
    SeqList myList;
int i,x;
     initiate(&myList);
for(i=0;i<10;i++){
    insertData(&myList,i,i+1);
}


deleteData(&myList,4,&x);
for(i=0;i    getData(myList,i,&x);
printf("%d  ",x);
}
return 0;
}

你可能感兴趣的:(c语言,c,线性表,c语言,struct,typedef)