第一次学,网上摸索出来的,结合自己的操作,大家不会的可以参考一下,是比较完全的了
#include<stdio.h>
#include<stdlib.h>
#define Max 10
#define TURE 1
#define FALSE 0
typedef int Elemtype;
typedef int Status;
typedef struct list{
Elemtype *elem;
int len;
}List;
//初始化
void List_Init(List *L){
L->elem=(Elemtype *)malloc(Max*sizeof(Elemtype));
L->len=0; //初始化数据长度;
}
//插入
Status List_Insert(List *L,int i,Elemtype data){
if(L->len==Max){ //如果插入的长度大于给定的大小
printf("The storage space is full!\n");
return FALSE;
}
if(i<1 || i>L->len+1 || L==NULL){ //插入的位置小于1,大于插入的位置,表空
printf("Position input error!\n");
return FALSE;
}
for(int j=Max-1;j>=i-1;j--){ //循环条件是i-1,也就是i-1之后的数都要挪一位
L->elem[j+1]=L->elem[j];
}
L->elem[i-1]=data; //两个用处:1、赋值用的 2、腾出位置放值
L->len++; //len不是空的,因为主函数赋值的时候这里已经在++了 ,以及最后给表加一个位置
return TURE;
}
//删除
Status Delete_Insert(List *L,int pos){ //位置插入
int i,j;
if(L->len==0){ //表为空
printf("The list is empty!\n");
return FALSE;
}
for(i=pos,j=pos;L->elem[i]!='\0';i++){ //i和j等于插入的位置,从插入的位置开始后一个覆盖前一个
L->elem[i]=L->elem[++j];
}
L->len--; //表长减1
return TURE;
}
//输出
void Show_List(List *L){
for(int i=0;i<L->len;i++){
printf("%d ",L->elem[i]);
}
printf("\n");
}
int main(){
int i;
List L;
List_Init(&L);
for(int i=0;i<Max-1;i++){
List_Insert(&L,i+1,i+1); //赋值,那些判断条件都用不上,就单纯传
}
printf("Before insert:\n");
Show_List(&L);
printf("After insert:\n");
List_Insert(&L,7,99);
Show_List(&L);
printf("After Delete:\n");
Delete_Insert(&L,6);
Show_List(&L);
}