【数据结构】第三章:队列

队列(Queue):具有一定操作约束的线性表

特点:FIFO

即先来先服务,只能在一端插入,在另一端删除

顺序存储实现:由一个一维数组和一个记录头元素位置的变量front以及一个记录队尾元素位置的变量rear组成

#define Maxsize <存储数据元素的最大个数>
struct QNode{
    ElementType Data[Maxsize];
    int rear;
    int front;
};
typedef struct QNode * Queue;

队列相关操作

一、入队和出队操作

//入队
void ADDQ(Queue PtrQ,ElementType item){
    if(PtrQ -> rear + 1) % Maxsize == PtrQ -> front){
        printf("队满!");
        return ;
    }
    PtrQ -> rear = (PtrQ -> rear + 1) % Maxsize;
    PtrQ -> Data[PtrQ -> rear ] = item;
}
//出队
ElementType DeleteQ(Queue PtrQ){
    if(PtrQ -> front == PtrQ -> rear){
        printf("队空");
        return error;
    }
    else{
        PtrQ -> front = (PtrQ -> front + 1) % Maxsize;
        return PtrQ -> Data[PtrQ -> front];
    }
}

队列的链式存储实现:

用一个单链表实现,插入和删除操作分别在两头进行,队列指针front和rear分别指向队首和队尾

其中front指向队头节点,rear指向队尾节点,即在头出,尾插

struct Node{
    ElementType Data;
    struct Node *Next;
};
struct QNode {
    struct Node *rear;
    struct Node *front;
};
typedef struct QNode *Queue;
Queue PtrQ;

相关操作:不带头节点的链式队列出队

ElementType DeleteQ(Queue PtrQ){
    struct Node *FrontCell;
    ElementType FrontElem;

    if(PtrQ -> front == NULL){
        printf("队列空");
        return error;
    }
    FrontCell = PtrQ -> front;
    if(PtrQ -> front == PtrQ -> rear){
        PtrQ -> front = PtrQ -> raer = NULL;
    }
    else{
        PtrQ -> front = PtrQ -> front -> Next;
    }
    FrontElem = FrontCell -> Data;
    free(FrontCell);
    return FrontElem;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值