循环链表实现队列

假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(不设头指针),编写相应队列初始化,入队,出队。 
 
    

#include #define datetype int using namespace std; struct QNode ///声明队列结点类型 { datetype date; QNode *next; }; struct Lqueue { QNode *rear; };///声明队列类型 void initQueue(Lqueue &Q) { Q.rear = new QNode; Q.rear->next = Q.rear; } bool emptyQueue(Lqueue &Q) { return Q.rear->next->next == Q.rear->next ? 1 : 0; } void pushQueue(Lqueue &Q, datetype &x) { QNode *p = new QNode; p->date = x; p->next = Q.rear->next; Q.rear->next = p; Q.rear = p; } datetype popQueue(Lqueue &Q) { datetype x; QNode *p; p = Q.rear->next->next;///p要指向取下的结点 x = p->date; ///保存结点数据 if (p == Q.rear) { ///当队列中只有一个节点时 p结点出队后 要将队尾指针指向头节点 Q.rear = Q.rear->next; Q.rear->next = p->next; } else Q.rear->next->next = p->next; delete(p); return x; } int main() { int n, a; Lqueue Q; initQueue(Q); cout << "请输入队列的元素数目" << endl; cin >> n; cout << "请输入每个结点的值" << endl; for (int i = 1; i <= n; i++) { cin >> a; pushQueue(Q, a); } cout << "输出:" << endl; while (!emptyQueue(Q)) cout << popQueue(Q) << endl; return 0; }

你可能感兴趣的:(C++&,数据结构)