先看运行结果:
1:线性表已满:
2:正常情况:
插入的数是999;
以下是代码部分:
(小白一枚,如果代码有问题,不喜勿喷。)
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
#define maxSize 10 //数组空间的大小,10个单元可以不放满。
typedef struct sequenlist{
int last; //线性表满的时候,为last为9;代表了数组下标;
int data[maxSize];
}sequenlist;
int ListInsert(sequenlist*L,int i,int e); //链表的插入
void creatlist(sequenlist*L); //创建顺序表并初始化
void printOut(sequenlist*L);
int main(){
int i; //插入位置(或者删除,因为作用域的关系,不同函数中,也可以表示删除等操作)的位置
int e; //插入的数据
sequenlist *L; //声明一个线性表
L=(sequenlist*)malloc(sizeof(sequenlist));//结构体指针在使用前要初始化
creatlist(L);
printf("当前数组的最大长度为10\t\t\t请输入你要插入的位置");
scanf("%d",&e);
ListInsert(L,e,999);
printf("\t\t\t\t\t插入数据后的线性表如下:\n");
printOut(L);
// L->last=L->last+1;
getch();
}
void creatlist(sequenlist*L){ //创建顺序表并初始化
int i; //因为作用域不同,所以可以在这里也用 i 表示数据的个数;
int j;
int temp; //表示插入的数据
printf("当前数组的最大长度为10\t\t\t请输入你想输入数据的个数:");
scanf("%d",&i);
for( j=0;j<i;j++){
printf("data[%d]=",j);
fflush(stdin);
scanf("%d",&temp);
L->data[j]=temp;
}
//别忘了写L-last;
L->last=j-1;
printf("\n");
}
int ListInsert(sequenlist*L,int i,int e){
int j; //此处用j代表要往后移动的元素下标。;因为插入的位置是用i(插入到第i个位置[下标为i-1;])代表的,
//所以,用j来表示方便些;
if(L->last==maxSize-1){ //if(L->last==maxSize-1)
printf("\t\t\t当前线性表已满\n");
return 0; //函数有了return就不能写void ListInsert(sequenlist*L,int i,int e);
}
else if( (i<0) || (i>L->last) ){
printf("\t\t\t插入位置错误\n");
return 0;
} else{
for(j=L->last;j>=i;j--){ //还没弄懂呢
L->data[j+1]=L->data[j];
// L->data[i]=e; // 教材上这段代码写在了这里 尽信书不如无书
// L->last=L->last+1; //下标+1;
}
L->data[i]=e;//写在外面,教材上没有写在这里,写在了上面第三行
return 1;
}
}
void printOut(sequenlist*L){
int i;
for(i=0;i<L->last+2;i++){
printf("data[%d]=%d " ,i,L->data[i]);// data[i],并不代表L-data[i]
//L->last++; //会无限循环。
}
L->last++;
}