做一个豁达而努力的自己。
链栈节点的存储结构:
typedef struct QNode { int data; //存储数据 QNode *next; //下一个节点的指针地址 }QNode;
链栈的存储结构:
typedef struct { QNode *front; //头指针 QNode *rear; //尾指针 }LinkQueue;
入队:
Status EnQueue(LinkQueue &q, int e) { QNode *s; s = new QNode; if(!s) return ERROR; s->data = e; s->next = NULL; q.rear->next = s; q.rear = s; return OK; }出队:
Status DeQueue(LinkQueue &q, int &e) { if(q.front == q.rear) return ERROR; QNode *p; p = q.front->next; e = p->data; q.front->next = p->next; if(q.rear == p) q.front = q.rear; delete p; return OK; }代码:
#include <iostream> using namespace std; //队列节点的存储结构 typedef struct QNode { int data; //存储数据 QNode *next; //下一个节点的地址指针 }QNode; //队列的存储结构 typedef struct { QNode *front; //头指针 QNode *rear; //尾指针 }LinkQueue; //队列的初始化 bool InitQueue(LinkQueue &q) { q.front = q.rear = new QNode; if(!q.front) return false; q.front->next = NULL; return true; } //入队 bool EnQueue(LinkQueue &q, int e) { QNode *s; s = new QNode; //创建一个节点 if(!s) return false; s->data = e; s->next = NULL; q.rear->next = s; q.rear = s; return true; } //出队 bool DeQueue(LinkQueue &q, int &e) { if(q.front == q.rear) return false; QNode *p; p = q.front->next; e = p->data; q.front->next = p->next; if(q.rear == p) q.rear = q.front; delete p; return true; } //打印队列 void PrintQueue(LinkQueue q) { QNode *p; p = q.front->next; while(p) { cout << p->data << '\t'; p = p->next; } cout << endl; } //销毁队列 void DestroyQueue(LinkQueue &q) { while(q.front) { q.rear = q.front->next; delete q.front; q.front = q.rear; } } //清除队列 void ClearQueue(LinkQueue &q) { QNode *p, *s; p = q.front->next; while(p) { s = p; delete s; p = p->next; } q.rear = q.front; q.front->next = NULL; } //判断队列是否为空 bool EmptyQueue(LinkQueue q) { if(q.front == q.rear) return true; return false; } //求对头元素 bool GetHead(LinkQueue q, int &e) { if(q.front == q.rear) return false; e = q.front->next->data; return true; } int main() { LinkQueue q; InitQueue(q); int e; cout << "输入5个元素:" << endl; for(int i = 1; i < 6; i++) { cin >> e; EnQueue(q, e); } PrintQueue(q); cout << "删除一个元素" << endl; DeQueue(q, e); PrintQueue(q); GetHead(q, e); cout << "输出对头元素:" << e << endl; cout << "销毁队列" << endl; ClearQueue(q); cout << "销毁成功" << endl; return 0; }