队列的链式存储结构及实现

队列的链式存储结构及实现


队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,我们简称为链队列。

 

typedef intQElemType;  /*QElemType类型根据实际情况而定,int*/

 

typedef structQNode       /*结点结构*/

{

     QElemType data;

     struct QNode *next;

} QNode,*QueuePtr;

 

typedef struct                            /*队列的链表结构*/

{

     QueuePtr front,rear;      /*队头队尾指针*/

} LinkQueue;


 队列的链式存储结构 入队操作

  入队操作时,其实就是在链式尾部插入结点。

 代码如下:

 /*插入元素eQ的新的队尾元素*

 

 

Status EnQueue(LinkQueue *Q, QElemType e)

{

     QueuePtr s =(QueuePtr)malloc(sizeof(QNode));

     if(!s)

            exit(OVERFLOW);     /*存储分配失败*/

     s->data = e;

     s->next = NULL;

     Q->rear->next =s;       /*把拥有元素e新节点s赋值给原队尾结点的后继*/

    

     Q->rear = s;       /*把当前的s设置为队尾结点,rear指向s*/

     return OK;

}


 队列的链式存储结构出队操作

 出队操作时,就是头结点的后继结点出队,将头结点的后继改为它后面的结点,若链表除头结点外只剩一个元素时,则需将rear指向头结点。


代码如下:

/*若队列不空,删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR*/

 

 

StatusDnQueue(LinkQueue *Q, QElemType e)

{

     QueuePtr p;

    

     if(Q->front == Q->rear)

            return ERROR;

     p=Q->front->next;

     *e =p->data;

     Q->front->next = p->next;

    

     if(Q->rear == p)

            Q->rear = Q->front;

    

     free(p);

    

     return OK;

    

    

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值