/*用链表生成队列,队列是特殊的链表,这允许在尾部插入,队头删除*/ #include <iostream> using namespace std; typedef struct Node{ int element; Node* pNext; }Node,*LinkList; typedef struct { LinkList head; LinkList tail; }Queue; void InitQueue(Queue& queue) { queue.head=(LinkList)malloc(sizeof(Node)); queue.head->pNext=NULL; queue.tail=queue.head; } void EnQueue(Queue& queue,int element) { LinkList temp=(LinkList)malloc(sizeof(Node)); temp->element=element; temp->pNext=NULL; queue.tail->pNext=temp; queue.tail=temp; } void DeQueue(Queue& queue,int &element) { if (queue.head->pNext==queue.tail) { element=queue.tail->element; free(queue.tail); queue.tail=queue.head; return; } LinkList temp=queue.head->pNext; element=temp->element; queue.head->pNext=temp->pNext; free(temp); } int EmptyQueue(Queue queue) { if (queue.head==queue.tail) { return 1; } return 0; } void DestroyQueue(Queue& queue) { free(queue.head); queue.head=queue.tail=NULL; } void main() { Queue queue; InitQueue(queue); for (int i=0;i<10;i++) { EnQueue(queue,i); } while (!EmptyQueue(queue)) { int temp; DeQueue(queue,temp); cout<<temp<<endl; } DestroyQueue(queue); }