//顺序栈 class Stack { private: int size; int top; char *st; public: Stack(int); bool push(char e); bool pop(char &e); }; Stack::Stack(int msize) { size = msize; top = -1; st = new char[size]; } bool Stack::push(char e) { if (top == size - 1) { cout << "栈满" << endl; return false; } else { st[++top] = e; return true; } } bool Stack::pop(char &c) { if (top == -1) { cout << "栈空" << endl; return false; } else { c = st[top--]; return true; } } //链式栈 class LNode { public: char data; LNode *next; }; class LStack { public: LStack(); bool push(char e); bool pop(char &e); private: LNode *top; }; LStack::LStack() { top = NULL; } bool LStack::push(char e) { LNode *ptr = new LNode; ptr->data = e; ptr->next = top; top = ptr; return true; } bool LStack::pop(char &e) { if (top == NULL) { cout << "栈空" << endl; return false; } else { LNode *ptr = top; e = top->data; top = top->next; delete ptr; return true; } } //顺序队 class Queue { private: int MaxSize; int front; int rear; char *qu; public: Queue(int size); bool enQueue(char e); bool deQueue(char &e); }; Queue::Queue(int size) { MaxSize = size; rear = front = 0; qu = new char[MaxSize]; } bool Queue::enQueue(char e) { if ((rear + 1) % MaxSize == front) { cout << "队满" << endl; return false; } rear = (rear + 1) % MaxSize; qu[rear] = e; return true; } bool Queue::deQueue(char &e) { if (rear == front) { cout << "队空" << endl; return false; } front = (front + 1) % MaxSize; e = qu[front]; return true; } //链队 class LQueue { private: LNode *front; LNode *rear; public: LQueue(); bool enQueue(char e); bool deQueue(char &e); }; LQueue::LQueue() { front = rear = NULL; } bool LQueue::enQueue(char e) { LNode *p = new LNode; p->data = e; p->next = NULL; if (rear == NULL) rear = front = p; else { rear->next = p; rear = p; } return true; } bool LQueue::deQueue(char &e) { LNode *p; if (rear == NULL) { cout << "队空" << endl; return false; } else p = front; if (front == rear) { front = rear = NULL; } else front = front->next; e = p->data; delete p; return true; }