链队列的基本操作
2017-04-28 09:33
90 查看
C++链队列的基本操作
#include<iostream> using namespace std; typedef int QueueElementType; typedef struct Node { QueueElementType data; struct Node *next; }LinkQueueNode; typedef struct { LinkQueueNode *front; LinkQueueNode *rear; }LinkQueue; void Initqueue(LinkQueue &Q); void Input(LinkQueue &Q); void Output(LinkQueue Q); bool Isempty(LinkQueue Q); void Enqueue(LinkQueue &Q, QueueElementType e); void Delqueue(LinkQueue &Q, QueueElementType &e); void Gethead(LinkQueue Q, QueueElementType &e); void Clear(LinkQueue &Q); void Interface(); int main() { Interface(); LinkQueue Q; Initqueue(Q); int n; while (1) { cout << "请输入操作序号:"; cin >> n; switch (n) { case 1: { cout << "请依次输入数据,并以-1作为结束标记:" << endl; Input(Q); break; } case 2: { cout << "队列中的元素:" << endl; Output(Q); break; } case 3: { if (Isempty(Q)) { cout << "队列为空!" << endl; } else { cout << "队列不为空!" << endl; } break; } case 4: { QueueElementType e; cout << "请输入入队列元素:"; cin >> e; Enqueue(Q, e); break; } case 5: { QueueElementType e; Delqueue(Q, e); cout << "元素" << e << "已出队列!" << endl; break; } case 6: { QueueElementType e; Gethead(Q, e); cout << "队头元素为:" << e << endl; break; } case 7: { Clear(Q); break; } case 0: { exit(0); break; } default: { cout << "输入的操作序号不正确!请核对..." << endl; } } } return 0; } void Initqueue(LinkQueue &Q) { Q.front = new LinkQueueNode; Q.rear = Q.front; Q.front->next = NULL; } void Input(LinkQueue &Q) { int e; while (1) { cin >> e; if (e == -1) { break; } Enqueue(Q, e); } } void Output(LinkQueue Q) { if (Isempty(Q)) { cout << "队列为空!" << endl; exit(1); } LinkQueueNode *q = Q.front->next; while (q) { cout << q->data << " "; q = q->next; } cout << endl; } bool Isempty(LinkQueue Q) { if (Q.front->next == NULL) { return true; } else { return false; } } void Enqueue(LinkQueue &Q, QueueElementType e) { LinkQueueNode *q = new LinkQueueNode; q->data = e; q->next = NULL; Q.rear->next = q; Q.rear = q; } void Delqueue(LinkQueue &Q, QueueElementType &e) { if (Isempty(Q)) { cout << "队列为空!" << endl; exit(1); } LinkQueueNode *q; q = Q.front->next; Q.front->next = q->next; if (Q.rear == q) { Q.rear = Q.front; } e = q->data; delete q; } void Gethead(LinkQueue Q, QueueElementType &e) { if (Isempty(Q)) { cout << "队列为空!" << endl; exit(1); } e = Q.front->next->data; } void Clear(LinkQueue &Q) { if (Isempty(Q)) { cout << "队列为空!" << endl; exit(1); } LinkQueueNode *p, *q; Q.rear = Q.front; p = Q.front->next; Q.front->next = NULL; while (p) { q = p; p = p->next; delete q; } } void Interface() { cout << "***************欢迎使用链队列系统******* 4000 ********" << endl; cout << "1:输入队列 2:输出队列" << endl; cout << "3:判断队列是否为空 4:入队列" << endl; cout << "5:出队列 6:取队头元素" << endl; cout << "7:清空队列 0:退出" << endl; cout << "*************************************************" << endl; cout << "输入0-7之间的数:" << endl; }