静态链表如何插入数据?
如下所示:
#include<stdio.h>
#define MaxSize 10
typedef struct{
int data[MaxSize];
int length;}sqList;
void InitList(sqList &L){
for(int i=0; i<MaxSize; i++)
L.data[i]=0;
L.length =0;}
void ListInsert(sqList &L, int i, int e){
for(int j=L.length; j>=i; j--)
L.data[j]=L.data[j-1];
L.data[i-1]=e ;
L.length ++;}
int main(){
sqList L;
InitList(L);
ListInsert(L,3,3);
return 0;
需要注意的是for(int j=L.length; j>=i; j--)
插入新元素,要将第i位后面的元素,分别向后移一位,所以要从最后一位(L.length
)开始,将其值给它的后一位(L.length +1
);再将最后第二位(L.length-1
)的值给最后一位(L.length
),所以要让j=L.length
插入第i位新元素时,因为数组的下标是从0开始,而位序是从1开始,所以L.data[i-1]=e
;
为了给操作者有更好的体验,可以将void ListInsert
改为bool类型,增加一些if条件语句,因为静态链表的MaxSize是有长度默认的,超过该值就应该报错;第i位应该满足1<=i<=L.length;
bool ListInsert(sqList &L, int i, int e){
if(i<1||i>MaxSize)
return false;
if(L.length>MaxSize)'
return false;
for(int j=L.length; j>=i; j--)
L.data[j]=L.data[j-1];
L.data[i-1]=e ;
L.length ++;
return true;}