#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;//
struct LNode* next;
}LNode,*LinkList;
//入队
void EnQueue(LinkList front,LinkList& rear,ElemType val)
{//入队时只会改变real不会改变front故只需要对队尾real加引用
LinkList pnew;
if(rear->next==front)//判断队列是不是满了
{
//队列满,申请一个结点的空间,放入队列
pnew=(LinkList) malloc(sizeof (LNode));
rear->data=val;//把入队元素放入rear的结点
rear->next=pnew;//放了一个新结点,其相当于做了分割
pnew->next=front;
rear=pnew;
}else{
rear->data=val;
rear=rear->next;
}
}
//出队
void DeQueue(LinkList& front,LinkList rear)
{//出队时只会改变front不会改变real故只需要对对头front加引用
if(front== rear)
{
printf("Queue is empty\n");//队列为空
} else{
printf("Dequeue is%d\n",front->data);//出队值为
front=front->next;
}
}
//循环队列操作总流程
void CircleQueue(LinkList& front,LinkList& rear)
{
//队列头和队列尾都指向一个结点,这时队列既是空的,也是满的
front=(LinkList) malloc(sizeof (LNode));
rear=front;
rear->next=front;
//入队
EnQueue(front,rear,3);
EnQueue(front,rear,4);
//出队
DeQueue(front,rear);
DeQueue(front,rear);
DeQueue(front,rear);
}
int main(){
LinkList front,rear;
CircleQueue(front,rear);
return 0;
}
链表循环队列——及其详解(408 2019年第42题)
最新推荐文章于 2024-08-24 23:54:19 发布