链式队列的基本使用

#include <stdio.h>
#include <stdlib.h>
//队列的基本使用 尾进头出
#define true 1
#define false 0
#define QueueElemType int

//队列的定义
typedef struct Node{
    QueueElemType data;
    struct Node * next;
}LinkQueueNode;

//这里我对于指针的理解是LinkQueueNode *S和*LinkQueue S是等价的,如果有错误希望告知,感谢
typedef struct node{
    LinkQueueNode *head;//头结点
    LinkQueueNode *rear;//尾结点
}*LinkQueue;

//队列的初始化
int InitLinkQueue(LinkQueue Q){
    Q = (LinkQueueNode *)malloc(sizeof (LinkQueueNode));//分配内存空间
    if(!Q->head) {
        Q->head = Q->rear;
        Q->head->next = NULL;//很好理解的想法
        return true;
    } else{

        return false;//不正确
    }
}

//队列的入队操作
int EnterQueue(LinkQueue Q, QueueElemType x) {
    LinkQueueNode *p;
    p = (LinkQueueNode *)malloc(sizeof (LinkQueueNode));//分配内存空间
    if(!p){
        p->data = x;
        p->next = NULL;//队尾插入
        Q->rear->next = p;
        Q->rear = p;//队尾插入改变尾指针结点
        return true;
    } else {
        return false;
    }
}
//队列的出队操作
int OutQueue(LinkQueue Q, QueueElemType *x) {//需要传出实参
    LinkQueueNode  *p;
    if(Q) {//队列为空时
        return false;
    } else {
        *x = Q->head->next->data;
        p = Q->head->next;//将第一个结点(不是头结点)命名为另一个名字p(这里只是我的理解,并不一定正确)
        Q->head->next = p->next;//出队操作
        if(Q->rear == p) {//当一个元素的队列出队时,出对后这个队列为空
            Q->rear == Q->head;
        }
        free (p);
    }
}

//主函数可用来测试各个功能
int main() {
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值