Joanofarc_alter 2022-09-03 19:48 采纳率: 92.9%
浏览 18
已结题

顺序表的添加元素函数无效

问题遇到的现象和发生背景

在学习顺序表时创建了一个添加元素的函数,但是使用该函数后无法将顺序表中的元素进行输出

问题相关代码,请勿粘贴截图
#include <stdio.h>
#include <stdlib.h>
#define initSize 100
typedef int DataType;
typedef struct SeqList{
    DataType *data;
    int length;
    int size;

}SeqList;
void initSeqList(SeqList * L){
    L->data=(DataType*)malloc(sizeof(DataType)*initSize);
    if(L->data==NULL){
        printf("初始化顺序表失败");
        return;
    }
    L->length=0;
    L->size=initSize;
}
void addElement(SeqList *L,DataType ele){
    if(L->length+1<=L->size){
        L->data[L->length-1]=ele;
    }else{
       DataType *p=L->data;
       L->data=(DataType*)malloc(sizeof(DataType)*(L->size)*2);
       for(int i=0;i<L->size;i++){
        L->data[i]=p[i];
       }
       L->size=L->size*2;
       free(p);


    }


}
int posDelete(int pos,SeqList *L){
    if(L->data==NULL){
        printf("顺序表为空删除失败");
        return -1;
    }

    if(pos<=0||pos>=L->length){
        printf("输入的位置非法删除失败");
        return -1;
    }
    for(int i=pos;L->length-1;i++){
        L->data[pos]=L->data[pos+1];
    }


    return L->data[pos];



}




int main()
{
    SeqList L;
    initSeqList(&L);

    addElement(&L,11);
    addElement(&L,12);
    addElement(&L,9);
    addElement(&L,15);
    addElement(&L,3);
    for(int i=0;i<L.length;i++){
           printf("%d",L.data[i]);

    }
    return 0;
}






运行结果及报错内容

img

我想要达到的结果

能够正常的输出添加的数据

  • 写回答

1条回答 默认 最新

  • _GX_ 2022-09-03 20:11
    关注

    修改如下

    #include <stdio.h>
    #include <stdlib.h>
    #include <assert.h>
    
    #define initSize 100
    
    typedef int DataType;
    
    typedef struct SeqList
    {
        DataType *data;
        int length;
        int size;
    } SeqList;
    
    void initSeqList(SeqList *L)
    {
        L->data = (DataType *)malloc(sizeof(DataType) * initSize);
        if (L->data == NULL)
        {
            printf("初始化顺序表失败");
            return;
        }
        L->length = 0;
        L->size = initSize;
    }
    
    void freeSeqList(SeqList *L) {
        free(L->data);
    }
    
    void addElement(SeqList *L, DataType ele)
    {
        if (L->length >= L->size)
        {
            DataType *p = L->data;
            int newSize = L->size * 2;
            L->data = (DataType *)malloc(sizeof(DataType) * newSize);
            for (int i = 0; i < L->length; i++)
                L->data[i] = p[i];
            L->size = newSize;
            free(p);
        }
        L->data[L->length] = ele;
        L->length++;
    }
    
    int posDelete(int pos, SeqList *L)
    {
        assert(L->data != NULL);
        assert(pos >= 0 && pos < L->length);
        DataType value = L->data[pos];
        for (int i = pos; i < L->length; i++)
            L->data[i] = L->data[i + 1];
        L->length--;
        return value;
    }
    
    int main()
    {
        SeqList L;
        initSeqList(&L);
    
        addElement(&L, 11);
        addElement(&L, 12);
        addElement(&L, 9);
        addElement(&L, 15);
        addElement(&L, 3);
    
        for (int i = 0; i < L.length; i++)
            printf("%d ", L.data[i]);
        printf("\n");
    
        freeSeqList(&L);
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月12日
  • 已采纳回答 9月4日
  • 创建了问题 9月3日

悬赏问题

  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案