“ 忠诚、笃学、严谨、守纪 ”

点击任意处进入

数据结构作业3

#include <stdio.h>
#include <stdlib.h>

// 定义队列数据类型
typedef int DataType;

// 循环队列结构体(增加 flag 区分空/满)
typedef struct SeqQueue {
    int MAXNUM;     // 队列最大容量
    int f, r;       // f=队头,r=队尾
    int flag;       // 标志位:0=最后出队,1=最后入队
    DataType *data; // 数据数组
} *PSeqQueue;

PSeqQueue createEmptyQueue_seq(int m) {
    // 分配队列头空间
    PSeqQueue paqu = (PSeqQueue)malloc(sizeof(struct SeqQueue));

    // 分配数组空间
    paqu->data = (DataType*)malloc(m * sizeof(DataType));

    paqu->MAXNUM = m;
    paqu->f = paqu->r = 0;  // 队头队尾都指向 0
    paqu->flag = 0;         // 初始为空,标记最后一次是出队

    return paqu;
}

int IsEmptyQueue_seq(PSeqQueue paqu) {
    // 空:f==r 且 flag=0
    if (paqu->f == paqu->r && paqu->flag == 0)
        return 1;  // 是空
    else
        return 0;  // 非空
}

int IsFullQueue_seq(PSeqQueue paqu) {
    // 满:f==r 且 flag=1
    if (paqu->f == paqu->r && paqu->flag == 1)
        return 1;  // 满
    else
        return 0;  // 不满
}

int enQueue_seq(PSeqQueue paqu, DataType x) {
    // 满了不能入队
    if (IsFullQueue_seq(paqu)) {
        printf("队列已满!\n");
        return 0;
    }

    // 放入队尾
    paqu->data[paqu->r] = x;
    // 队尾后移(循环)
    paqu->r = (paqu->r + 1) % paqu->MAXNUM;

    paqu->flag = 1;  // 入队 → flag=1
    return 1;
}

int deQueue_seq(PSeqQueue paqu) {
    // 空不能出队
    if (IsEmptyQueue_seq(paqu)) {
        printf("队列为空!\n");
        return 0;
    }

    // 队头后移(循环)
    paqu->f = (paqu->f + 1) % paqu->MAXNUM;

    paqu->flag = 0;  // 出队 → flag=0
    return 1;
}
posted @ 2026-05-06 21:50  alonep  阅读(7)  评论(0)    收藏  举报