队列的实现
#include<stdlib.h> #include<string.h> #include<stdio.h> typedef int Item; typedef struct node* PNode; typedef struct node { Item data; PNode next; }Node; typedef struct { PNode front; PNode rear; int size; }Queue; int GetSize(Queue *pqueue) { return pqueue->size; } bool IsEmpty(Queue *pqueue) { if(pqueue->front==NULL && pqueue->rear==NULL &&pqueue->size==0) return true; return false; } void DestroyQueue(Queue *pqueue) { PNode pnode; while(!IsEmpty(pqueue)) { pnode=pqueue->front; pqueue->front=pnode->next; free(pnode); pqueue->size--; } } Queue *InitQueue() { Queue *pqueue=(Queue*)malloc(sizeof(Queue)); if(pqueue!=NULL) { pqueue->front=NULL; pqueue->rear=NULL; pqueue->size=0; } return pqueue; } PNode DeQueue(Queue *pqueue,Item *pitem)//队头出队列 { PNode pnode = pqueue->front; if(!IsEmpty(pqueue)) { *pitem=pnode->data; pqueue->front=pnode->next; pqueue->size--; free(pnode); if(pqueue->size==0) pqueue->rear=NULL; } return pqueue->front; } PNode EnQUeue(Queue *pqueue,Item item)//队尾加元素 { PNode pnode=(PNode)malloc(sizeof(Node)); pnode->data=item; pnode->next=NULL; if(IsEmpty(pqueue)) { pqueue->front=pnode; } else { pqueue->rear->next=pnode; } pqueue->rear = pnode; pqueue->size++; return pnode; } int main() { Queue *pq=InitQueue(); for(int i=0;i<10;i++) { EnQUeue(pq,i); } for(int i=0;i<10;i++) { Item item; DeQueue(pq,&item); printf("%d\n",item); } DestroyQueue(pq); }