丶長安先生 2021-11-29 20:10 采纳率: 37.5%
浏览 13
已结题

数据结构链表实现全局变量传递失败

问题遇到的现象和发生背景 :
数据结构进行数据的插入和删除,但是在数据进行插入删除后进行输出的时候,用全局变量进行输出,输出失败。然后调试了一下发现在插入和删除的函数里面给全局变量赋值的时候,那行代码没有执行,是直接跳过的这个是怎么回事。具体代码如下:

问题相关代码,请勿粘贴截图
//用全局变量实现数据传递函数插入
#include"stdio.h"
#include"stdlib.h"
#define MAXSIZE 20
#define OK 1
#define ERROR 0
typedef struct Linear_list
{
    int elem[MAXSIZE];
    int last;//最后一个元素的位置也就是数组下标
}SeqList;
SeqList L_P;
//插入函数
int insertList(SeqList* Lp, int i, int x)
{
    int j;
    if (Lp->last == MAXSIZE - 1)
    {
        printf("表满");
        return(ERROR);
    }
    if (i<1 || i>Lp->last + 2)
    {
        printf("插入位置错误");
        return(ERROR);
    }
    for (j = Lp->last;j >= i - 1;j--)
        Lp->elem[j + 1] = Lp->elem[j];
    Lp->elem[i - 1] = x;
    Lp->last++;
    return(OK);
    L_P=*Lp;
    /*这里使用全局变量进行赋值*/
} 
//顺序表输出函数
void input(SeqList L)
{
    int j;
    for(j=0;j<L.last;j++)
    {
        printf("  %d",L.elem[j]);
    }
    printf("\n");
}
// 删除函数
int DeleteList(SeqList *Lp, int i)
{
    int j;
    if(i<1||i>Lp->last+1)
    {
        printf("删除位置错误,不存在第%d个位置,原样输出\n",i);
        return 0;
    }
    for(j=i;j<=Lp->last;j++)
    {
        Lp->elem[j-1]=Lp->elem[j];
    }
    Lp->last--;
    return 1;
    //这里又要进行地址传递要不然不能输出
    L_P=*Lp;
}
// 主函数开始
void main()
{
    SeqList L;
    int i,j,x;
    printf("请求输入顺序表中元素的个数:\n");
    scanf("%d",&L.last);
    printf("请输入顺序表中的各个元素:\n");
    for(j=0;j<L.last;j++)
    {
        scanf("%d",&L.elem[j]);
    }
    //对输入的顺序表进行输出
    input(L);
    printf("\n请输入想要插入的元素:");
    scanf("%d",&x);
    printf("请输入要插入的元素的位置:");
    scanf("%d",&i);
    insertList(&L, i, x);/*这里的L在上面是结构体类型,但是插入函数需要指针类型,所以用&进行转化*/
    // 对插入后的顺序表进行输出
    printf("插入后元素进行输出:");
    input(L_P);/*这里其实可以返回参数用参数进行传递输出*/ 
    printf("请输入要删除的元素的位置:");
    scanf("%d",&i);
    DeleteList(&L,i);//对函数进行删除操作
    printf("删除后顺序表为:");
    input(L_P);
}

运行结果及报错内容

img

我的解答思路和尝试过的方法

我以为是我编译系统的问题,然后试了另一个代码如下结果显示是成功的。
代码:

//用全局变量实现数据传递函数插入
#include"stdio.h"
int SLP=0;//全局结构体变量
int out(int x,int y)
{
    int z;
    z=x+y;
    SLP=3;
    return(z);
}
void main()
{
    int x,y;
    x=1,y=2;
    printf("%d",out(x,y));
    printf("%d",SLP);
}


结果如下:

img

我想要达到的结果

img

  • 写回答

1条回答 默认 最新

  • 丶長安先生 2021-11-29 20:43
    关注

    知道了,知道了,那个全局变量应该在返回值之后。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月7日
  • 已采纳回答 11月29日
  • 创建了问题 11月29日

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办