实现链队各种基本运算的算法

/*Title:实现链队各种基本运算的算法
  Time:2018-2-2
  Author:邹吉祥
  School:imnu
*/
#include<stdio.h>
#include<malloc.h>
typedef char ElemType;
typedef struct linknode
{
    ElemType data;
    struct linknode* next;
}QNode;

typedef struct
{
    QNode* Front;  //队头指针;
    QNode* Rear;    //队尾指针;
}LiQueue;

void InitQueue(LiQueue *& q)
{
    q=(LiQueue*)malloc(sizeof(LiQueue));
    q->Front=q->Rear=NULL;
}

void DestroyQueue(LiQueue *& q)
{
    QNode *p=q->Front,*r;
    if(p!=NULL){
        r=p->next;
        while(r!=NULL)
        {
            free(p);
            p=r;
            r=p->next;
        }
    }
    free(p);
    free(q);  //
}

bool QueueEmpty(LiQueue *q){

   return (q->Rear==NULL);
}

void enQueue(LiQueue *& q,ElemType  e) //入队;
{
    QNode *p=(QNode*)malloc(sizeof(QNode));
    p->data=e;
    p->next=NULL;
    if(q->Rear==NULL){ //若链队为空时;
        q->Front=q->Rear=p;
    }
    else
    {
        q->Rear->next=p;
        q->Rear=p;
    }
}

bool deQueue(LiQueue *& q,ElemType &e)
{
    QNode *t;
   if(q->Rear==NULL) //链队为空;
   {
       return false;
   }
   t=q->Front; //我感觉此处的赋值是结点之间的赋值;
   if(q->Rear==q->Front)  //链队中只有一个结点的时候;
   {
       q->Rear=q->Front=NULL;
   }
   else
   {
       q->Front=q->Front->next;
   }
   e=t->data;
   free(t);
   return true;
}

int main()
{
    LiQueue* q;
    ElemType e;
    InitQueue(q);  //初始化;
    enQueue(q,'a');
    enQueue(q,'b');
    enQueue(q,'c');
    enQueue(q,'d');
    while(!QueueEmpty(q))
    {
       deQueue(q,e);
       printf("%c\n",e);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值