2301_79537224 2023-10-11 20:09 采纳率: 50%
浏览 12
已结题

顺序表里指针和引用的作用

在数据结构里,我发现无论是顺序表还是链表,开辟空间都需要指针,就好比顺序表存储结构里的ElemType *elem,初始化的时候就L.elem=new ElemType[100],
为什么不能直接ElemType elem,初始化的时候直接给elem赋值呢,必须要new一下开辟空间才能再赋值?像int i,i=0,这里也没有i=new int啊,而且定义的时候也没有int *i,为什么定义顺序表的时候要这么繁琐,又要用指针又要用new方法

 还有再主函数里是定义了一个结构体变量,但是把结构体变量当做实参传递给方法函数里的形参的时候,不是不会对实参产生影响吗,改变的不是形参的值吗,按理说这样创建的顺序表是无法返还的,难道是因为结构体变量本身就是一个地址?

img

img

img

  • 写回答

3条回答 默认 最新

  • 陌柒2333 2023-10-11 20:28
    关注

    存储结构定义的时候可以不用指针,我写顺序表的时候就没用。

    #define maxsize 100
    
    typedef char ElemType;
    //定义顺序表 
    typedef struct
    {ElemType elem[maxsize];
    int last;
    }SeqList;
    //创建顺序表
    SeqList * Init_SeqList()
    {SeqList *L;
    L=(SeqList *) malloc (sizeof(SeqList));
    if(L!=NULL)
    {L->last=-1;
    }
    printf("成功创建一个顺序表\n"); 
    return L;
    }
    
    

    第二个问题
    你调用函数的时候如果形参是指针的话,那函数内部直接修改的是指针所指地址的值,那么哪怕没有返回值,这个改变也是真实的。
    像插入和删除函数:

    //插入 
    int Insert_SeqList(SeqList *L)
    {int i,j;
    ElemType e;
    printf("\n请输入插入的位置和内容:");
    scanf("%d %c",&i,&e);
    if(L->last>=maxsize-1)
    {printf("表已满无法插入\n");
    return 0;
    }
    if((i<1)||(i>L->last+2))
    {printf("插入位置i不合法");
    return -1;
    }
    for(j=L->last;j>=i-1;j--)
    L->elem[j+1]=L->elem[j];
    L->elem[i-1]=e;
    L->last++;
    return 1;
    }
    //删除
    int Delete_SeqList(SeqList *L)
    {    int i,k;
        ElemType n;
        ElemType *e;
        e=&n;
        printf("\n请输入删除的位置:");
        scanf("%d",&i);
        if((i<1)||(i>L->last+1))
        {
            printf("删除位置不合法!");
            return 0; 
        }
        else
        {*e=L->elem[i-1];
        for(k=i;k<=L->last;k++)
        L->elem[k-1]=L->elem[k];
        L->last--;
        }
        return 1;
     } 
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月22日
  • 已采纳回答 10月14日
  • 修改了问题 10月12日
  • 修改了问题 10月12日
  • 展开全部

悬赏问题

  • ¥30 电脑误删了手机的照片怎么恢复?
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
  • ¥20 学生成绩管理系统设计
  • ¥15 来一个cc穿盾脚本开发者
  • ¥15 CST2023安装报错
  • ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办
  • ¥15 有人懂怎么做大模型的客服系统吗?卡住了卡住了
  • ¥20 firefly-rk3399上启动卡住了