浙江大学数据结构(2.3.2队列的链式存储实现)

队列的链式存储实现

队列的链式存储结构也可以用一个单链表实现。插入和删除操作分别在链表的两头进行;队列指针front和rear应该分别指向链表的哪一头?

  • front指向链表的头结点(头结点能找到下一个结点,可进行删除操作)
  • rear指向链表的尾结点(只能做插入操作)
struct Node
{
    ElementType Data;
    struct Node* Next;
};

struct QNode
{
    struct Node *rear;  /*指向队尾结点*/
    struct Node *front;  /*指向队头结点*/  
};
typedef struct QNode *Queue;
Queue PtrQ;

// 出队操作
ElementType DeleteQ(Queue PtrQ)
{
 struct Node* FrontCell;
 ElementType FrontElem;
 
 if (PtrQ->front==NULL)
    {
     printf("堆栈空");
     return ERROR;
    }
 FrontCell=PtrQ->front;
 if (PtrQ->front==PtrQ->rear)
    {
     PtrQ->front=PtrQ->rear=NULL; 
    }
 else
    {
     PtrQ->front=PtrQ->front->Next;
    }
 FrontElem=PtrQ->front->Data;
 free(FrontCell)
 return FrontElem;
}


// 入队操作
void AddQ(Queue PtrQ,ElementType Elem)
{
 if (PtrQ->front==PtrQ->rear)
    {
     printf("堆栈满");
     return ERROR;
    }
 else
    {
     PtrQ->rear->Next->Data=Elem;
     PtrQ->rear=PtrQ->rear->Next;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42681308/article/details/88855812