ITjingxinbao 2023-02-18 21:12 采纳率: 80.8%
浏览 29
已结题

顺序表项目中的小问题

为什么我顺序表结果得不到理想结果?


```c
void Testseqlist1()
{
    s1 s1;
    seqlistInit(&s1);
    seqlistpushback(&s1, 1);
    seqlistpushback(&s1, 2);
    seqlistpushback(&s1, 3);
    seqlistprint(&s1);
}
int main()
{

    Testseqlist1();
    return 0;
}

#pragma once
#include<stdio.h>
#include<stdlib.h>

typedef int sldatatype;

typedef  struct seqlist
{
    sldatatype* a;
    sldatatype  size;
    int capacity;//数组实际存储空间
}s1;
//接口函数
void seqlistprint(s1*ps);
void seqlistInit(s1* ps);//初始化
void seqlistpushback(s1*ps, sldatatype x);//尾插
void seqlistpopback(s1*ps, sldatatype x);

```c
#include "seqlist.h"

void seqlistprint(s1*ps)
{
    for (int i = 0; i < ps->size; i++)
    {
        printf("%d,ps->a[i]");
    }
    printf("\n");

}

void seqlistInit(s1* ps)
{
    ps->a = NULL;
    ps->size = ps->capacity = 0;

}

void seqlistpushback(s1* ps, sldatatype x)
{
    if (ps->size == ps->capacity)
    {
        //如果没有空间外面就扩容
        int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
        sldatatype*tmp = (sldatatype*)realloc(ps->a, newcapacity*sizeof(sldatatype));
        if (tmp == NULL)
        {
            printf("realloc fail");
            exit(-1);
        }
        ps->a = tmp;
        ps->capacity = newcapacity;
    }
    ps->a[ps->size] = x;
    ps->size++;
}
void seqlistpopback(s1* ps);



```我想要的结果应该是123。为什么最后不是

```

  • 写回答

4条回答 默认 最新

  • 社区专家-Monster-XH 2023-02-18 21:26
    关注

    基于Monster 组和GPT的调写:
    ,seqlistprint 函数中有一个小错误。在输出数组元素时,你没有使用正确的格式化字符串,因此结果是错误的。

    将 printf("%d,ps->a[i]"); 修改为 printf("%d,", ps->a[i]); 即可解决这个问题,具体来说,应该是:

    void seqlistprint(s1*ps)
    {
        for (int i = 0; i < ps->size; i++)
        {
            printf("%d,", ps->a[i]);
        }
        printf("\n");
    }
    
    
    

    修改后的 seqlistprint 函数会输出正确的结果:1,2,3,。注意到这里多了一个逗号,因为你在循环中输出元素后,还输出了一个换行符。如果你不想输出这个额外的逗号,可以使用一个 if 语句判断是否是最后一个元素,然后输出换行符。

    同时,你还需要实现 seqlistpopback 函数,否则在测试完 seqlistpushback 函数后,可能会有内存泄漏问题。具体实现可以参考 seqlistpushback 函数,不过需要将数组的大小减一,并释放最后一个元素的内存空间。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月27日
  • 已采纳回答 2月19日
  • 创建了问题 2月18日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部