#include <stdio.h> #include <iostream> using namespace std; typedef int SElemType; struct Node { SElemType data; struct Node* next; }; typedef struct { Node* front; Node* rear; }LinkQueue; //初始化队列 bool InitQueue(LinkQueue* &queue) { queue = new LinkQueue(); if(!queue) { return false; } queue->front = NULL; queue->rear = NULL; return true; } //入队列 void EnQueue(LinkQueue* &queue,SElemType e) { Node* node = new Node(); node->data = e; node->next = NULL; //如果队列为空 if(queue->rear == NULL) { queue->front = node; queue->rear = node; } else//如果队列不为空 { queue->rear->next = node; queue->rear = node; } } //出队列 SElemType DeQueue(LinkQueue* &queue) { if(queue->front == NULL) { return -1; } else { SElemType elem; Node* node = queue->front; elem = node->data; if(queue->front->next == NULL) { queue->front = NULL; queue->rear = NULL; } else { queue->front = queue->front->next; } delete node; return elem; } } //获得队列头元素 SElemType GetHead(LinkQueue* &queue) { if(queue->front!=NULL) { return queue->front->data; } else return -1; } //判断队列空 bool empty(LinkQueue* &queue) { if(queue->front == NULL) return true; else return false; } //求队列长度 int QueueLength(LinkQueue* &queue) { int i = 0; Node* p = queue->front; while(p!=NULL) { i++; p = p->next; } return i; } //清空队列 void ClearQueue(LinkQueue* &queue) { if(queue->front == NULL) { return; } else { Node* p = queue->front; Node* q = p->next; while(q) { delete p; p = NULL; p = q; q = q->next; } delete p; p = NULL; queue->front = NULL; queue->rear = NULL; } } //销毁队列 void DestroyQueue(LinkQueue* &queue) { ClearQueue(queue); delete queue; queue = NULL; } //显示队列 void PrintQueue(LinkQueue* &queue) { Node* p = queue->front; while(p) { cout<<p->data<< " "; p = p->next; } cout << endl; } void main() { LinkQueue* queue; InitQueue(queue); EnQueue(queue,3); EnQueue(queue,4); EnQueue(queue,5); PrintQueue(queue); cout<< GetHead(queue) << endl; cout<< DeQueue(queue) << endl; DestroyQueue(queue); }