C语言 队列 完整操作

模仿C++标准库的成员函数写的队列操作,是循环队列,减少一个存储代码来判断满栈,具体思路见代码。

完整代码:

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10

typedef int datatype;
/**记录 满队列 状态 的方法是少用一个单位
  *队列为:队首front指向第一个元素,队尾rear指向最后一个元素的下一个位置
  */
typedef struct q_node *ptrNode;
typedef struct q_node
{
    int data[MAXSIZE];
    int rear,front_;//rear 末尾

}queue_node;
typedef ptrNode queue_;

queue_ create_queue()
{
    queue_ q = (queue_)malloc(sizeof(queue_node));
    q->rear=q->front_=-1;
    return q;
}
int empty_(queue_ q)
{
    if(q->front_==q->rear)return 1;
    return 0;
}
int full(queue_ q)
{
    if( (q->rear+1)%MAXSIZE == q->front_ )return 1;
    return 0;
}
//出队列
void pop(queue_ q)
{
    q->front_ = (q->front_+1)%MAXSIZE;
}
//入队列
void push(queue_ q,datatype d)
{
    q->data[q->rear]=d;
    q->rear = (q->rear+1)%MAXSIZE;
}
datatype top(queue_ q)
{
    return q->data[q->front_];
}

int main()
{
    queue_ q = create_queue();
    printf("队列判空结果为:%d\n",empty_(q));
    printf("顺序将7,4,5加入队列\n");
    push(q,7);//1
    push(q,4);//2
    push(q,5);//3
    printf("队首元素为:%d\n",top(q));
    printf("队列判空结果为:%d\n",empty_(q));
    push(q,11);//4
    push(q,2);//5
    printf("顺序将11,2加入队列\n");
    printf("队首元素为:%d\n",top(q));
    pop(q);//4
    printf("出队列一次\n");
    printf("队首元素为:%d\n",top(q));
    pop(q);//3
    pop(q);//2
    printf("出队列两次\n");
    printf("队首元素为:%d\n",top(q));
    push(q,10);//3
    push(q,11);//4
    push(q,12);//5
    push(q,13);//6
    push(q,14);//7
    push(q,15);//8
    push(q,16);//9
    printf("顺序将10~16加入队列\n");
    printf("队首元素为:%d\n",top(q));
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值