#includeusing namespace std; //節點類 template struct QNode { T data; QNode *next; }; //隊列類 template struct LinkList { QNode * front; QNode * rear; size_t size; }; //構造一個空隊列 template void InitQueue(LinkList & que) { que.front = (QNode *)malloc(sizeof(QNode )); if(!que.front) exit(0); que.size = 0; que.rear = que.front; que.rear->next = 0; } //銷毀隊列 template void DestroyQueue(LinkList & que) { QNode * p = que.front->next; free(que.front); while(p != 0) { que.front = p->next; free(p); p = que.front; } } //清空隊列 template void ClearQueue(LinkList & que) { QNode * p = que.front->next; while(p != 0) { que.rear = p->next; free(p); p = que.rear; } que.rear = que.front; que.front->next = 0; que.size = 0; } //返回隊列的長度 template int QueueLength(LinkList & que) { return que.size; } //返回隊列的隊首元素 template T GetHead(LinkList & que) { return que.front->next->data; } //元素入隊 template void EnQueue(LinkList & que,T t) { QNode *p = (QNode *)malloc(sizeof(QNode )); if(!p) exit(0); p->data = t; p->next = 0; que.rear->next = p; que.rear = p; que.size++; } //元素出隊 template bool DeQueue(LinkList & que,T & t) { if(que.size==0) return false; QNode *p = que.front->next; que.front->next = p->next; que.size--; t = p->data; free(p); return true; } //從對頭到隊尾元素遍歷調用visit函數 template void VisitQueue(LinkList & que,void (*visit)(T &t)) { QNode *p = que.front->next; while(p != 0) { (*visit)(p->data); p = p->next; } } //測試函數 template void Print(T &t) { cout< void AddOne(T &t) { t++; } int main() { //創建一個空的隊列 LinkList queue; //初始化隊列 InitQueue(queue); //元素入隊 EnQueue(queue,1); EnQueue(queue,2); EnQueue(queue,3); EnQueue(queue,4); //返回隊列的長度 cout<<"隊列的長度: "< ); //返回隊列的隊首元素 cout<<"隊列的隊首元素: "< ); //輸出所有元素 VisitQueue(queue,Print ); //清空隊列 ClearQueue(queue); //銷毀隊列 DestroyQueue(queue); }