您的位置:首页 > 其它

带头结点的循环链表表示队列的初始化、入队列和出队列的算法

2016-10-13 13:39 1311 查看
假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列和出队列的算法。
带头结点循环链队列CLQueue的类型为以下LinkList类型:

[cpp] view
plain copy

 




typedef struct LNode{  

    ElemType data;  

    struct LNode *next;  

} LNode, *LinkList;  

typedef LinkList CLQueue;  

实现函数如下:

[cpp] view
plain copy

 





Status InitCLQueue(CLQueue &rear)//队列初始化  

{   

   rear = (CLQueue)malloc(sizeof(LNode));  

   if(!rear) return FALSE;  

   rear -> next = rear;  

   return TRUE;     

}  

  

Status EnCLQueue(CLQueue &rear, ElemType x)//入队列  

{   

    CLQueue head,p;  

    head = rear -> next;  

    p = (CLQueue)malloc(sizeof(LNode));  

    if(!p)return FALSE;    //储存分配失败  

    p -> data = x;  

    p -> next = head;  

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

    rear = p;             //将当前的p设置为队尾节点  

    return TRUE;  

}  

  

Status DeCLQueue(CLQueue &rear, ElemType &x)//出队列  

{   

    CLQueue head,p;  

    head = rear -> next;  

    if(head == rear)return FALSE;  

    p = head -> next;     //将欲删除的队头结点暂存给p  

    x = p -> data;        //将欲删除的队头结点的值赋给x  

    head -> next = p -> next;//将原队头结点的后继p->next赋值给头结点后继  

    free(p);  

    return TRUE;  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐