#include<stdio.h> #include<stdlib.h> typedef struct QueueNode *PtrToNode; struct QueueNode { /* 队列中的结点 */ int Data; PtrToNode Next; }; typedef PtrToNode Position; struct QNode { Position Front, Rear; /* 队列的头、尾指针 */ int MaxSize; /* 队列最大容量 */ }; typedef struct QNode *Queue; typedef struct QueueNode *Node; Queue createQueue(){ // 生成空队列 Queue q = (Queue)malloc(sizeof(struct QNode)); q->Front=q->Rear=NULL; return q; }; Node createNode(int data){ // 生成一个待加入队列的节点 Node node = (Node)malloc(sizeof(struct QueueNode)); node->Data=data; return node; } int isQEmpty(Queue q){ // 判断队列是否为空 return q->Front == NULL; } int qPush(Node n,Queue q){ // 将节点推进队列 if(isQEmpty(q)){ n->Next=NULL; q->Front=n; q->Rear=n; }else{ q->Rear->Next=n; n->Next=NULL; q->Rear=q->Rear->Next; } return 1; } int qPop(Queue q){ // 从队列中取出一个元素 if(isQEmpty(q)){ printf("Queue is Empty!"); return NULL; }else{ Node tempNode = q->Front; int data = tempNode->Data; q->Front = q->Front->Next; free(tempNode); return data; } } int main(){ Queue q = createQueue(); for(int i=0;i<=5;i++){ Node node=createNode(i); qPush(node,q); } for(int i=0;i<=6;i++){ // 这里多取一个,但队列取第五个时候已经取空 int result=qPop(q); if(result!=NULL){ printf("%d ",result); } } }
文章评论