鱼C论坛

 找回密码
 立即注册
查看: 2990|回复: 5

[已解决]数据结构顺序表输出问题

[复制链接]
发表于 2021-4-19 10:23:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
学习数据结构写了一段代码想实现数据表,在主函数中加了一个循环想输出一下表内的数据,但是运行的结果没有输出数据,代码不知道哪里有问题。
希望高人指点
运行后终端显示如下
PS E:\C项目\SeqList> cd "e:\C项目\SeqList\" ; if ($?) { gcc SeqList.c -o SeqList } ; if ($?) { .\SeqList }
(然后就没了)
代码如下:

#include<stdio.h>
#include<stdlib.h>
#define InitSize 100

typedef struct{
    int *data;
    int MaxSize, length;
} SeqList;

void InitList(SeqList L){
    L.data = (int *)malloc(InitSize * sizeof(int));
    L.length = 0;
    L.MaxSize = InitSize;
}

void IncreaseSize(SeqList L,int len)
{
    int *p = L.data;
    L.data = (int *)malloc((L.MaxSize + len) * sizeof(int));
    for (int i = 0; i < L.length;i++)
    {
        L.data[i] = p[i];
    }
    L.MaxSize = L.MaxSize + len;
    free(p);
}

int main()
{
    SeqList L;
    InitList(L);
    for (int i = 0; i < 5;i++)
    {
        L.data[i] = 2*i;
    }
    IncreaseSize(L, 5);
    for (int i = 0; i < 5;i++)
    {
        printf("%d", L.data[i]);
    }
    printf("MaxSize is :%d", L.MaxSize);
    return 0;
}
最佳答案
2021-4-19 11:22:16
#include<stdio.h>
#include<stdlib.h>
#define InitSize 100

typedef struct {
    int* data;
    int MaxSize, length;
} SeqList;

void InitList(SeqList *L) {
    L->data = (int*)malloc(InitSize * sizeof(int));
    L->length = 0;
    L->MaxSize = InitSize;
}

void IncreaseSize(SeqList *L, int len)
{
    int* p = L->data;
    L->data = (int*)malloc((L->MaxSize + len) * sizeof(int));
    for (int i = 0; i < L->length; i++)
    {
        L->data[i] = p[i];
    }
    L->MaxSize = L->MaxSize + len;
    free(p);
}

int main()
{
    SeqList L;
    InitList(&L);
    for (int i = 0; i < 5; i++)
    {
        L.data[i] = 2 * i;
        L.length++;
    }
    IncreaseSize(&L, 5);
    for (int i = 0; i < 5; i++)
    {
        printf("%d", L.data[i]);
    }
    puts("");
    printf("MaxSize is :%d", L.MaxSize);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-19 11:18:58 | 显示全部楼层
本帖最后由 yuxijian2020 于 2021-4-19 11:25 编辑

你传参传的不是指针,值传递的话,传入的参数不会有什么改变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-19 11:22:16 | 显示全部楼层    本楼为最佳答案   
#include<stdio.h>
#include<stdlib.h>
#define InitSize 100

typedef struct {
    int* data;
    int MaxSize, length;
} SeqList;

void InitList(SeqList *L) {
    L->data = (int*)malloc(InitSize * sizeof(int));
    L->length = 0;
    L->MaxSize = InitSize;
}

void IncreaseSize(SeqList *L, int len)
{
    int* p = L->data;
    L->data = (int*)malloc((L->MaxSize + len) * sizeof(int));
    for (int i = 0; i < L->length; i++)
    {
        L->data[i] = p[i];
    }
    L->MaxSize = L->MaxSize + len;
    free(p);
}

int main()
{
    SeqList L;
    InitList(&L);
    for (int i = 0; i < 5; i++)
    {
        L.data[i] = 2 * i;
        L.length++;
    }
    IncreaseSize(&L, 5);
    for (int i = 0; i < 5; i++)
    {
        printf("%d", L.data[i]);
    }
    puts("");
    printf("MaxSize is :%d", L.MaxSize);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-19 11:22:52 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-4-19 14:04:34 | 显示全部楼层
wwhdx 发表于 2021-4-19 11:22
#include
#include
#define InitSize 100

大佬,我按照你的改之后,它会显示结构体内的语句有问题。
说:表达式必须具有结构或联合类型,但是它具有类型“SeqList”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-19 14:13:31 | 显示全部楼层
them0b 发表于 2021-4-19 14:04
大佬,我按照你的改之后,它会显示结构体内的语句有问题。
说:表达式必须具有结构或联合类型,但是它具 ...

标黄的是重点,注意还有一些其他的细节,比如指针访问结构体成员的方式也要改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-23 22:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表