#include #define ERROR 0
struct Node{
int Data;
struct Node *Next;
};
struct QNode{
struct Node *rear;
struct Node *front;
};
typedef struct QNode *Queue;
//创建队列
Queue CreateQueue();
//删除队列头元素
int DeleteQ(Queue PtrQ);
//在队尾插入元素
void InsertQ(int item,Queue PtrQ);
//打印队列
void Print(Queue PtrQ);
//判断是否空
int IsEmpty(Queue Q);
int main()
{
Queue PtrQ=CreateQueue();
Print(PtrQ);
InsertQ(1,PtrQ);
InsertQ(2,PtrQ);
InsertQ(3,PtrQ);
Print(PtrQ);
DeleteQ(PtrQ);
Print(PtrQ);
InsertQ(1,PtrQ);
Print(PtrQ);
DeleteQ(PtrQ);
DeleteQ(PtrQ);
DeleteQ(PtrQ);
Print(PtrQ);
return 0;
}
Queue CreateQueue(){
Queue PtrQ;
PtrQ=(Queue)malloc(sizeof(struct QNode));
struct Node *rear;
struct Node *front;
rear =(Node*)malloc(sizeof(struct Node));
rear=NULL;
front =(Node*)malloc(sizeof(struct Node));
front=NULL;
PtrQ->front=front;
PtrQ->rear=rear;
return PtrQ;
};
int DeleteQ(Queue PtrQ){
struct Node *FrontCell;
int FrontElem;
if(IsEmpty(PtrQ)){
printf("队列空");
return ERROR;
}
FrontCell=PtrQ->front;
if(PtrQ->front==PtrQ->rear)
PtrQ->front=PtrQ->rear=NULL;
else{
PtrQ->front=PtrQ->front->Next;
}
FrontElem=FrontCell->Data;
free(FrontCell);
return FrontElem;
}
void InsertQ(int item,Queue PtrQ){
struct Node *FrontCell;
FrontCell=(Node*)malloc(sizeof(struct Node));
FrontCell->Data=item;
FrontCell->Next=NULL;
if(IsEmpty(PtrQ)){
PtrQ->front=FrontCell;
PtrQ->rear=FrontCell;
}
else{
PtrQ->rear->Next=FrontCell;
PtrQ->rear=FrontCell;
}
};
void Print(Queue PtrQ) {
struct Node *Q1;
Q1 = PtrQ->front;
if (Q1 == NULL) {
printf("NULL\n");
return;
}
while (Q1 != PtrQ->rear) {
printf("%d ", Q1->Data);
Q1 =Q1->Next;
}
printf("%d", Q1->Data);
putchar('\n');
}
int IsEmpty(Queue Q){
return(Q->front==NULL);
};