weixin_74304339 2023-07-06 00:23 采纳率: 76.9%
浏览 24
已结题

数据结构C语言小问题

#include<stdio.h>
#include<stdlib.h>
#include"001.h"
#pragma once
void SeqListInit(SL2* ps)//初始化
{
    ps->a = NULL;
    ps->size = ps->capacity = 0;
}

void SeqListPushBack(SL2* ps, SLDateType x)//尾插一个数据
{
    if (ps->size=ps->capacity)
    {
        int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
        SLDateType* tmp = (SLDateType*)realloc(ps->a,newcapacity*sizeof(SLDateType));
        if (tmp=NULL)
        {
            printf("realloc fail\n");
            exit(-1);
        }
        ps->a = tmp;
        ps->capacity = newcapacity;
    }
    ps->a[ps->size] = x; 
    ps->size++;
}

void SeqListPrint(SL2* ps)
{
    for (int i = 0; i < ps->size; i++)
    {
        printf("%d\n", ps->a[i]);
    }
}
void testseqlist()
{
    SL2 s1;
    SeqListInit(&s1);
    SeqListPushBack(&s1, 1);
    SeqListPushBack(&s1, 2);
    SeqListPushBack(&s1, 3);
    SeqListPushBack(&s1, 4);
    SeqListPrint(&s1);
}
int main()
{
    testseqlist();
    return 0;
}

在这出现了问题

img


这是头文件里的代码

#pragma once
#define N 100
#include<stdio.h>
#include<stdlib.h>
typedef int SLDateType;

//静态顺序表
    typedef  struct SeqList1
    {
        SLDateType a[N];
        int size;//表示存储了多少个数据
    }SL1;
    void SeqListPrint(SL1* ps);//打印
    void SeqListInit(SL1* ps);
    void SeqListPushBack(SL1*ps,SLDateType x);//尾插
    void SeqListPushFront(SL1* PS, SLDateType);//头插
    void SeqListPopBack(SL1* PS);//尾删
    void SeqListPopFront(SL1* PS);//头删
//动态顺序表
    typedef  struct seqlist2
    {
        SLDateType* a;
        int size;//表示存储了多少个数据
        int capacity;//数组实际能存的数据空间有多大

    }SL2;


不知道问题出在哪

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2023-07-06 09:41
    关注

    两处问题,在.cpp文件里:
    第13行: if (ps->size=ps->capacity) 应修改为:if (ps->size == ps->capacity)
    第17行:if (tmp=NULL) 应修改为:if (tmp == NULL)

    #include<stdio.h>
    #include<stdlib.h>
    #include"001.h"
    #pragma once
    void SeqListInit(SL2* ps)//初始化
    {
        ps->a = NULL;
        ps->size = ps->capacity = 0;
    }
    
    void SeqListPushBack(SL2* ps, SLDateType x)//尾插一个数据
    {
        if (ps->size == ps->capacity)  //if (ps->size = ps->capacity) 修改
        {
            int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
            SLDateType* tmp = (SLDateType*)realloc(ps->a, newcapacity * sizeof(SLDateType));
            if (tmp == NULL)   //if (tmp = NULL)  修改
            {
                printf("realloc fail\n");
                exit(-1);
            }
            ps->a = tmp;
            ps->capacity = newcapacity;  
        }
        ps->a[ps->size] = x;
        ps->size++;
    }
    
    void SeqListPrint(SL2* ps)
    {
        for (int i = 0; i < ps->size; i++)
        {
            printf("%d\n", ps->a[i]);
        }
    }
    void testseqlist()
    {
        SL2 s1;
        SeqListInit(&s1);
        SeqListPushBack(&s1, 1);
        SeqListPushBack(&s1, 2);
        SeqListPushBack(&s1, 3);
        SeqListPushBack(&s1, 4);
        SeqListPrint(&s1);
    }
    int main()
    {
        testseqlist();
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月14日
  • 已采纳回答 7月6日
  • 创建了问题 7月6日