创建链式队列
//创建链式队列 typedef struct QNode { int data; struct QNode *next; }QNode, *QueuePtr; //创建链式队列的链接形式 typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue;
初始化链式队列
//链式队列的初始化 bool InitLinkQueue(LinkQueue &Q) { Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode)); if (!Q.front) return false; Q.front = Q.rear = NULL; return true; }
链式队列的销毁
//链式队列的销毁 bool DestroyLinkQueue(LinkQueue &Q) { QNode *p; //从头结点开始依次向下循环,找寻是否还存在结点,存在就一个个销毁 while (Q.front) { p = Q.front->next;//下一个地址先存着 free(Q.front); Q.front = p; } //或者直接不用P /* while(Q.front) { Q.rear = Q.front->next; free(Q.front) Q.front = Q.rear; } */ return true; }
链式队列的入队---只能从队尾入队哦!!!!
//链式队列的入队---只能从队尾入队哦!!!! bool EnLinkQueue(LinkQueue &Q, int e) { QNode *p; p = new QNode; if (!p) return false; //想象在最后一个结点是如何插入的,串起来指针 p->data = e; Q.rear->next = p; Q.rear = p; }
链式队列出队---只能在队头出队
//链式队列出队---只能在队头出队 bool DeLinkQueue(LinkQueue &Q, int &e) { //先判断是否为队空 if (Q.rear == Q.front) return false; QNode *p; p = Q.front->next; e = p->data; Q.front->next = p->next; //如果p就是最后一个结点了,头指针就是 if (Q.rear == p) { Q.front = Q.rear; } delete p; return true; }
取链式队头
//取链式队头 int GetLinkQueueHead(LinkQueue Q) { return Q.front->next->data; }