//使用数组实现队列 #include <iostream> #include <Windows.h> using namespace std; #define MAXSIZE 5 //队列的最大容量 typedef int DataType; //队列中的元素类型 typedef struct Queue { DataType queue[MAXSIZE]; int front; //队头指针 int rear; //队尾指针 }SeqQueue; //队列初始化 void InitQueue(SeqQueue *SQ) { if (!SQ) return ; SQ->front = SQ->rear = 0; //把队头和队尾指针同时置0 } //判断队列为空 bool IsEmpty(SeqQueue* SQ) { if (!SQ) return false; if (SQ->front == SQ->rear) { return true; } return false; } //判断队列是否为满 bool IsFull(SeqQueue* SQ) { if (!SQ) return false; if (SQ->rear == MAXSIZE) { return true; } return false; } //入队,将元素data插入到队列SQ中 bool EnterQueue(SeqQueue* SQ, DataType data) { if (!SQ)return false; if (IsFull(SQ)) { cout << "无法插入元素" << data << ",队列已满!" << endl; return false; } SQ->queue[SQ->rear] = data; //在队尾插入元素data SQ->rear++;//队尾指针后移一位 return true; } //出队方法一,将队列中队头的元素data出队,后面的元素向前移动 bool DeleteQueue(SeqQueue* SQ, DataType* data) { if (!SQ || IsEmpty(SQ)) { cout << "队列为空!" << endl; return false; } if (!data)return false; *data = SQ->queue[SQ->front]; for (int i = SQ->front + 1; i < SQ->rear; i++) { SQ->queue[i - 1] = SQ->queue[i]; } SQ->rear--;//队尾指针前移一位 return true; } //出队方法二,将队列中队头的元素data出队,出队后队头指针front后移一位 bool DeleteQueue2(SeqQueue* SQ, DataType* data) { if (!SQ || IsEmpty(SQ)) { cout << "队列为空!" << endl; return false; } if (SQ->front >= MAXSIZE) { cout << "队列已到尽头!" << endl; return false; } *data = SQ->queue[SQ->front]; SQ->front = (SQ->front) + 1;//队首指针后移一位 return true; } void PrintQueue(SeqQueue* SQ) { if (!SQ)return; int i = SQ->front; while (i < SQ->rear) { cout << SQ->queue[i] << " "; i++; } cout << endl; } //获取队首元素,不出队 int getHead(SeqQueue* SQ, DataType* data) { if (!SQ || IsEmpty(SQ)) { cout << "队列为空!" << endl; } return *data = SQ->queue[SQ->front]; } //清空队列 void ClearQueue(SeqQueue* SQ) { if (!SQ) return; SQ->front = SQ->rear = 0; } //获取队列中元素的个数 int getLength(SeqQueue* SQ) { if (!SQ)return 0; return SQ->rear - SQ->front; } int main() { SeqQueue* SQ = new SeqQueue; DataType data = -1; //初始化队列 InitQueue(SQ); //入队 for (int i = 0; i < 7; i++) { EnterQueue(SQ, i); } //打印队列中的元素 printf("队列中的元素(总共%d 个):", getLength(SQ)); PrintQueue(SQ); cout << endl; //出队 //for(int i=0; i<10; i++){ if (DeleteQueue2(SQ, &data)) { cout << "出队的元素是:" << data << endl; } else { cout << "出队失败!" << endl; } //} //打印队列中的元素 printf("出队一个元素后,队列中剩下的元素:"); PrintQueue(SQ); cout << endl; system("pause"); return 0; }