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日

悬赏问题

  • ¥15 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀