辣条星星 2022-04-28 18:20 采纳率: 100%
浏览 24
已结题

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

#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;
}

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-04-29 13:27
    关注

    修改如下,供参考:

    #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;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月9日
  • 已采纳回答 5月1日
  • 创建了问题 4月28日

悬赏问题

  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法