做一个豁达而努力的自己。
顺序循环队列的存储结构:
typedef struct { int *base; //基地址 int front; //对头指针 int rear; //队尾指针 }SqQueue;
入队:
Status EnQueue(SqQueue &q, int e) { if((q.rear + 1) % MAXSIZE == q.front) return ERROR; q.base[q.rear] = e; q.rear = (q.rear + 1) % MAXSIZE; return OK; }出队:
Status DeQueue(SqQueue &q, int e) { if(q.rear == q.front) return ERROR; e = q.base[q.rear]; q.front = (q.front + 1) % MAXSIZE; return OK; }
代码:
#include <iostream> using namespace std; #define MAXSIZE 100 //顺序队列的存储结构 typedef struct { int *base; //初始化的动态分配空间 int front; //头指针 int rear; //尾指针 }SqQueue; //顺序队列的初始化 bool InitQueue(SqQueue &q) { q.base = new int[MAXSIZE]; if(!q.base) return false; q.front = q.rear = 0; return true; } //销毁顺序队列 void DestroyQueue(SqQueue &q) { if(q.base) { delete q.base; q.front = q.rear = 0; } } //顺序队列的当前长度 int QueueLength(SqQueue q) { return (q.rear - q.front + MAXSIZE) % MAXSIZE; } //顺序队列的清除 bool ClearQueue(SqQueue &q) { if(q.base) { q.front = q.rear = 0; return true; } return false; } //判断顺序队列是否为空 bool EmptyQueue(SqQueue q) { if(q.front == q.rear) return true; return false; } //入队 bool EnQueue(SqQueue &q, int e) { if((q.rear + 1) % MAXSIZE == q.front) return false; q.base[q.rear] = e; q.rear = (q.rear + 1) % MAXSIZE; return true; } //出队 bool DeQueue(SqQueue &q, int &e) { if(q.front == q.rear) return false; e = q.base[q.front]; q.front = (q.front + 1) % MAXSIZE; return true; } //打印顺序队列 void PrintQueue(SqQueue q) { while(q.front != q.rear) { cout << q.rear << '\t'; q.rear--; } cout << endl; } int main() { SqQueue q; InitQueue(q); int e; cout << "输入5个元素" << endl; for(int i = 1; i < 6; i++) { cin >> e; EnQueue(q, e); } PrintQueue(q); cout << "删除两个元素" << endl;; for(int i = 1; i < 3; i++) DeQueue(q, e); PrintQueue(q); cout << "销毁队列" << endl; DestroyQueue(q); cout << "销毁成功" << endl; return 0; }