前驱和后继输出时有错误,插入节点和值的时候,为什么输出没有变化啊

#include <stdio.h>
#define MAXSIZE 100
typedef int elemtype;
typedef struct
{ elemtype elem[MAXSIZE];
int len;
}SqList;

int init_Sq(SqList &L)
{ L.len=0; }

int length_Sq( SqList L )
{ return L.len; }

int create_Sq( SqList &L)
{ printf("请输入元素个数:");
scanf("%d",&L.len);
printf("请输入各元素的值:");
for (int i=0; i<L.len; i++){
scanf("%d",&L.elem[i]); }
}
int get_Sq(SqList L,int i)
{ return L.elem[i] ; }

int disp_Sq(SqList L)
{ int i;
for (i=0; i<L.len; i++){
printf("%3d",L.elem[i]);}
printf("\n"); }

int search_Sq(SqList L, int key)

{ int i;
for (i=0; i< L.len; i++)
if (L.elem[i]==key ) return i;
return -1; }

int delete_Sq(SqList &L, int i)

{ int j;
for (j=i; j<L.len; j++ )
L.elem[j-1]=L.elem[j];
L.len--; }

int insert_Sq(SqList L,int i,int x)

{ int j;
for (j=L.len-1; j>=i+1; j--)
L.elem[j+1]=L.elem[j];
L.elem[i+1]=x;
L.len++;
}

int pre_Sq(SqList &L,int i)
{
if(i>L.len||i<1) printf("error");
i=L.elem[i-1];
L.len--;
}

int next_Sq(SqList &L,int i)
{
if(i>L.len+1||i<1) printf("error");
i=L.elem[i+1];
L.len++;
}

int main()
{ int k,x;
SqList L;
init_Sq(L);
create_Sq(L);
printf("建立的顺序表为:\n ");
disp_Sq(L);
printf("表的长度为=%d\n",length_Sq(L));
printf("请输入结点的序号: ");
scanf("%d",&k);
printf("结点的值为:%d\n", get_Sq(L,k) );
printf("结点的前驱为:%d\n", pre_Sq(L,k) );
printf("结点的后继为:%d\n\n ", next_Sq(L,k) );
printf(" \n请输入需删除的结点的序号: ");
scanf("%d",&k);
delete_Sq(L,k);
printf("删除结点后的顺序表为:\n ");
disp_Sq(L);
printf(" \n请输入需插入结点的位置与值: ");
scanf("%d %d",&k,&x);
insert_Sq(L,k,x);
printf("插入结点后的顺序表为:\n ");
disp_Sq(L);
return 0;
}

修改如下,供参考:

#include <stdio.h>
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef int elemtype;
typedef struct
{
    elemtype elem[MAXSIZE];
    int len;
}SqList;

int init_Sq(SqList& L)
{
    L.len = 0;
    return OK;   //修改
}

int length_Sq(SqList L)
{
    return L.len;
}

int create_Sq(SqList& L)
{
    printf("请输入元素个数:");
    scanf("%d", &L.len);
    printf("请输入各元素的值:");
    for (int i = 0; i < L.len; i++) {
        scanf("%d", &L.elem[i]);
    }
    return OK;  //修改
}
int get_Sq(SqList L, int i)
{
    if (i<1 || i>L.len) return ERROR;  //修改
    return L.elem[i - 1];            //修改 
}

int disp_Sq(SqList L)
{
    int i;
    for (i = 0; i < L.len; i++) {
        printf("%3d", L.elem[i]);
    }
    printf("\n");
    return OK;
}

int search_Sq(SqList L, int key)

{
    int i;
    for (i = 0; i < L.len; i++)
        if (L.elem[i] == key) return i + 1;  //修改
    return -1;
}

int delete_Sq(SqList& L, int i)

{
    int j;
    if (i<1 || i>L.len) return ERROR;  //修改
    for (j = i; j < L.len; j++)
        L.elem[j - 1] = L.elem[j];
    L.len--;
    return OK;       //修改
}

int insert_Sq(SqList& L, int i, int x) //int insert_Sq(SqList L, int i, int x) 修改

{
    int j;
    if (i<1 || i>L.len) return ERROR;  //修改
    for (j = L.len; j > i - 1; j--)   //for (j = L.len - 1; j >= i + 1; j--)
        L.elem[j] = L.elem[j - 1];      //L.elem[j+1] = L.elem[j];
    L.elem[j] = x;                   //L.elem[i+1] = x;
    L.len++;
    return OK;                      //修改
}

int pre_Sq(SqList L, int i)   //int pre_Sq(SqList& L, int i)
{
    if (i > L.len || i < 1) {
        printf("error");
        return ERROR;          //修改
    }
    if (i - 1 == 0)            //修改
        return - 1;
    else
        return L.elem[i - 2]; //修改
                  //L.len--;
}

int next_Sq(SqList L, int i)  //int next_Sq(SqList& L, int i)
{
    if (i > L.len + 1 || i < 1) {
        printf("error");
        return ERROR;
    }
    if (i + 1 > L.len)
        return  -1;         //修改
    else
        return  L.elem[i];  //修改
                         //L.len++;
}

int main()
{
    int k, x, t;
    SqList L;
    init_Sq(L);
    create_Sq(L);
    printf("建立的顺序表为:\n ");
    disp_Sq(L);

    printf("表的长度为=%d\n", length_Sq(L));

    printf("请输入结点的序号: ");
    scanf("%d", &k);
    printf("结点的值为:%d\n", get_Sq(L, k));
    t = pre_Sq(L, k);
    if (t == -1)
        printf("结点%d为第一个结点,无前驱结点。\n",k);
    else
        printf("结点的前驱值为:%d\n", t);

    t = next_Sq(L, k);
    if (t == -1)
        printf("结点%d为最后一个结点,无后续结点。\n", k);
    else
        printf("结点的后继值为:%d\n\n ", t);

    printf(" \n请输入需删除的结点的序号: ");
    scanf("%d", &k);
    delete_Sq(L, k);
    printf("删除结点后的顺序表为:\n ");
    disp_Sq(L);

    printf(" \n请输入需插入结点的位置与值: ");
    scanf("%d %d", &k, &x);
    insert_Sq(L, k, x);
    printf("插入结点后的顺序表为:\n ");
    disp_Sq(L);

    return 0;
}