「已注销」 2022-03-22 14:39 采纳率: 100%
浏览 43
已结题

顺序表插入删除,编译器没有检查出错误,但是结果没有输出。

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

编译器没有检查出错误,但是没有结果输出

问题相关代码,请勿粘贴截图
//尾插尾删,头插头删,中间插入删除,查找
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef  int SLDataType;
typedef struct SqList
{
    SLDataType* a;//存储数据
    int size;//有效数据长度
    int Capacity;//开辟内存的空间    
}SL,SqList;
void SqListInit(SL* ps)//初始化
{
    ps->a=(SLDataType*)malloc(sizeof(SLDataType)*4);
    if(ps->a==NULL)
    {
        printf("初始化失败!\n");
        exit(-1);
    }
    ps->a=NULL;
    ps->size=0;
    ps->Capacity=4;
} 
void SqListCheckcapcity(SL* ps)
{
        assert(ps);
    if(ps->size>ps->Capacity)
    {
        ps->Capacity *=2;
        ps->a=(SLDataType*)realloc(ps->a,sizeof(SLDataType)*ps->Capacity);
        if(ps->a=NULL)
        {
            printf("扩容失败!\n");
            exit(-1);
        }
    }
}
void SqListprintf(SL* ps)//遍历 
{
    assert(ps);
    int i=0;
    for(;i<ps->size;i++)
    {
        printf("%d",ps->a[i]);
    }
    printf("\n");
}
void SqListpushback(SL* ps,SLDataType x)//尾插 
{
    assert(ps);
    SqListCheckcapcity(ps);
    if(ps->Capacity>0)
    {
        ps->a[ps->size]=x;
    }
    ps->size++;
}
void SqListpopback(SL* ps)
{
    assert(ps);
    ps->size--;
}
void SqListpushfront(SL* ps,SLDataType x) //头插 
{
    assert(ps);
    SqListCheckcapcity(ps);
    int end=ps->size;
    while(end>0)
    {
        ps->a[end]=ps->a[end-1];
        end--;
    }
    ps->a[0]=x;
    ps->size++;    
}
void SqListpopfront(SL* ps)
{
    assert(ps);
    int begin=0;
    while(begin<ps->size-1)
    {
        ps->a[begin]=ps->a[begin+1];
        begin++;
    }
    ps->size--;
}
void SqListinsert(SL* ps,SLDataType pos,int x)//中间插入 
{
    assert(ps);
    SqListCheckcapcity(ps);
    int end=ps->size;
    while(ps->Capacity>0&&pos<end)
    {
        ps->a[end]=ps->a[end-1];
        end--;
    }
    ps->a[pos]=x;
    ps->size++;
}
void SqListerase(SL* ps,SLDataType pos)
{
    assert(ps);
    int end=ps->size-1;
    if(ps->Capacity>0&&pos<end)
    {
        ps->a[pos]=ps->a[pos+1];
        pos++;
    }
    ps->size--;
}
int main(void)
{
    SqList ps;
    SqListInit(&ps);
    SqListpushback(&ps,1);//尾插
    SqListpushback(&ps,2);//尾插
    SqListprintf(&ps);//遍历 
    SqListpushback(&ps,3);//尾插
    SqListprintf(&ps);//遍历 
    SqListpushback(&ps,4);//尾插
    SqListprintf(&ps);//遍历 
    SqListpushback(&ps,5);//尾插
    SqListprintf(&ps);//遍历 
    SqListpopback(&ps);//尾删 
    SqListprintf(&ps);//遍历 
    SqListpushfront(&ps,9);//头插,向后边挪,后边的先移
    SqListprintf(&ps);//遍历 
    SqListpushfront(&ps,8);//头插,向后边挪,后边的先移
    SqListprintf(&ps);//遍历 
    SqListpushfront(&ps,7);//头插,向后边挪,后边的先移
    SqListprintf(&ps);//遍历 
    SqListpushfront(&ps,6);//头插,向后边挪,后边的先移
    SqListprintf(&ps);//遍历 
    SqListpopfront(&ps);//头删,向前边移,前边的先移
    SqListprintf(&ps);//遍历  
    return 0;
} 
运行结果及报错内容

img

img

img

img

我想要达到的结果

希望找到问题所在!谢谢

  • 写回答

4条回答 默认 最新

  • 关注

    修改的部分在代码中有注释,代码修改如下:

    
    //尾插尾删,头插头删,中间插入删除,查找
    #include<stdio.h>
    #include<stdlib.h>
    #include<assert.h>
    typedef  int SLDataType;
    typedef struct SqList
    {
        SLDataType* a;//存储数据
        int size;//有效数据长度
        int Capacity;//开辟内存的空间    
    }SL, SqList;
    void SqListInit(SL* ps)//初始化
    {
        ps->a = (SLDataType*)malloc(sizeof(SLDataType) * 4);
        if (ps->a == NULL)
        {
            printf("初始化失败!\n");
            exit(-1);
        }
        //ps->a = NULL;  //修改1  已经申请空间了,这里不应该再设置为NULL
        ps->size = 0;
        ps->Capacity = 4;
    }
    void SqListCheckcapcity(SL* ps)
    {
        assert(ps);
        if (ps->size >= ps->Capacity) //修改2,这里应该是>=
        {
            ps->Capacity *= 2;
            ps->a = (SLDataType*)realloc(ps->a, sizeof(SLDataType) * ps->Capacity);
            if (ps->a == NULL) //修改3 应该是 ==,不是=
            {
                printf("扩容失败!\n");
                exit(-1);
            }
        }
    }
    void SqListprintf(SL* ps)//遍历 
    {
        assert(ps);
        int i = 0;
        for (; i < ps->size; i++)
        {
            printf("%d", ps->a[i]);
        }
        printf("\n");
    }
    void SqListpushback(SL* ps, SLDataType x)//尾插 
    {
        assert(ps);
        SqListCheckcapcity(ps);
        if (ps->Capacity > ps->size ) //修改4 ps->Capacity > 0
        {
            ps->a[ps->size] = x;
        }
        ps->size++;
    }
    void SqListpopback(SL* ps)
    {
        assert(ps);
        ps->size--;
    }
    void SqListpushfront(SL* ps, SLDataType x) //头插 
    {
        assert(ps);
        SqListCheckcapcity(ps);
        int end = ps->size;
        while (end > 0)
        {
            ps->a[end] = ps->a[end - 1];
            end--;
        }
        ps->a[0] = x;
        ps->size++;
    }
    void SqListpopfront(SL* ps)
    {
        assert(ps);
        int begin = 0;
        while (begin < ps->size - 1)
        {
            ps->a[begin] = ps->a[begin + 1];
            begin++;
        }
        ps->size--;
    }
    void SqListinsert(SL* ps, SLDataType pos, int x)//中间插入 
    {
        assert(ps);
        SqListCheckcapcity(ps);
        int end = ps->size;
        while (ps->Capacity > 0 && pos < end)
        {
            ps->a[end] = ps->a[end - 1];
            end--;
        }
        ps->a[pos] = x;
        ps->size++;
    }
    void SqListerase(SL* ps, SLDataType pos)
    {
        assert(ps);
        int end = ps->size - 1;
        if (ps->Capacity > 0 && pos < end)
        {
            ps->a[pos] = ps->a[pos + 1];
            pos++;
        }
        ps->size--;
    }
    int main(void)
    {
        SqList ps;
        SqListInit(&ps);
        SqListpushback(&ps, 1);//尾插
        SqListpushback(&ps, 2);//尾插
        SqListprintf(&ps);//遍历 
        SqListpushback(&ps, 3);//尾插
        SqListprintf(&ps);//遍历 
        SqListpushback(&ps, 4);//尾插
        SqListprintf(&ps);//遍历 
        SqListpushback(&ps, 5);//尾插
        SqListprintf(&ps);//遍历 
        SqListpopback(&ps);//尾删 
        SqListprintf(&ps);//遍历 
        SqListpushfront(&ps, 9);//头插,向后边挪,后边的先移
        SqListprintf(&ps);//遍历 
        SqListpushfront(&ps, 8);//头插,向后边挪,后边的先移
        SqListprintf(&ps);//遍历 
        SqListpushfront(&ps, 7);//头插,向后边挪,后边的先移
        SqListprintf(&ps);//遍历 
        SqListpushfront(&ps, 6);//头插,向后边挪,后边的先移
        SqListprintf(&ps);//遍历 
        SqListpopfront(&ps);//头删,向前边移,前边的先移
        SqListprintf(&ps);//遍历  
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月30日
  • 已采纳回答 3月22日
  • 创建了问题 3月22日

悬赏问题

  • ¥35 这个的负序网络和零序网络怎么画?
  • ¥200 基于同花顺supermind的量化策略脚本编辑
  • ¥20 Html备忘录页面制作
  • ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
  • ¥20 数学建模来解决我这个问题
  • ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
  • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度