「已注销」 2023-03-24 08:58 采纳率: 90%
浏览 44
已结题

c语言关于实现队列操作出现的问题

代码为什么出现了这个

img

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>



#define MAX 10
typedef int TY_data;
typedef struct quece
{
    TY_data* a;
    int front;
    int rear;
}SqQueue;


void InitSqQueue(SqQueue* s);
void InitSqQueue(SqQueue* s)
{
    s->a = (TY_data*)malloc(sizeof(TY_data) * MAX);
    if (s->a == NULL)
    {
        exit(1);
    }
    s->front = 0;
    s->rear = 0;
    printf("创建成功\n");
    return 0;

}

int Queuelength(SqQueue s);
int Queuelength(SqQueue s)
{
    return (s.rear - s.front + MAX) % MAX;
}

void PutSqQueue(SqQueue*, TY_data);
void PutSqQueue(SqQueue* s, TY_data b)
{
    if ((s->rear + 1) % MAX == s->front)
    {
        printf("队列已满\n");
        return 0;
    }

    s->a[s->rear] = b;
    s->rear = (s->rear + 1) % MAX;
    printf("入队成功\n");
    return 0;

}

TY_data PopSqQuece(SqQueue* s);
TY_data PopSqQuece(SqQueue* s)
{
    if (s->front == s->rear)
    {
        printf("队列为空\n");
        return 0;
    }

    TY_data a;
    a = s->a[s->front];
    s->front = (s->front + 1) % MAX;
    printf("出队成功\n");
    return a;
}

TY_data GetHead(SqQueue* s);
TY_data GetHead(SqQueue* s)
{
    if (s->front == s->rear)
    {
        printf("队列为空\n");
        return 0;
    }

    TY_data a = 0;
    a = s->a[s->front];
    return 0;
}

void DestroySqQuece(SqQueue* s)
{
    
    free(s->a);
    s->a = NULL;
    printf("销毁成功\n");
}

int main()
{
    SqQueue* j;
    InitSqQueue(&j);
    int ch[5] = { 1,2,3,4,5 };
    for (int i = 0; i < 5; i++)
    {
        PutSqQueue(&j, ch[i]);
    }
    for (int i = 0; i < 5; i++)
    {
        int a;
        a = PopSqQuece(&j);
        printf("%d\n",a);
    }
    DestroySqQuece(&j);

    
    return 0;
}

  • 写回答

4条回答 默认 最新

  • 於黾 2023-03-24 09:11
    关注

    函数定义在前,不需要声明,函数定义在后,需要在前面声明
    你这一个声明跟一个定义的写法看着真是强迫症发作
    你这InitSqQueue函数问题多了
    首先s根本没分配内存,你就先给s.a分配内存,s是野指针能不报错吗
    其次s是指针,j也是指针,改变形参不改变实参,所以即使你给s赋值,j也不会变,你需要将s给return回去,要么把s定义成比j高一级的指针
    现在它俩同级,而你却把一个的地址赋值给另一个,类型错误,这在更高级的IDE,比如vs里,根本不会允许你编译

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证