C/C++实现队列
能跑,有点小问题
#include <iostream> using namespace std; #define QUEUEMAX 5 typedef int dataType; typedef struct Queue { int queue[QUEUEMAX]; int front;//队头指针 int rear;//队尾指针 }SeqQueue; //初始化 bool initQueue(SeqQueue *sq) { if (!sq) return false; sq->front = 0; sq->rear = 0; return true; } //判断队列是否为空 int isEMpty(SeqQueue*sq) { if (!sq) return 0; if (sq->front == sq->rear) return 1; } //队列已满 int isfull(SeqQueue* sq) { if (!sq) return 0; if (sq->rear == QUEUEMAX) { cout << sq->rear << endl; return 1; } return 0; } //入队 int enterQueue(SeqQueue* sq, int data) { if (!sq) return 0; if (isfull(sq)) { cout << "队列已满,无法插入"; return 0; } sq->queue[sq->rear] = data;//队尾插入数据 sq->rear++; return 1; } //出队,后面元素前移 int DeleteQueue(SeqQueue*sq, int* data) { cout << "data==" << *data << endl; if (!sq || !isEMpty(sq)) { cout << "队列为空"; return 0; } if (!data) return 0; cout << "出队 sq->front ==" << sq->front << endl; *data = sq->queue[sq->front]; //移动后面的元素 for (int i = sq->front; i < sq->rear; i++) { sq->queue[i] = sq->queue[i + 1]; } sq->rear--; return 1; } //获取队首元素 int getHead(SeqQueue* sq, int* data) { if (!sq || !isEMpty(sq)) { cout << "队列为空"; return 0; } return *data = sq->queue[sq->front]; } //清空队列 void CloseQueue(SeqQueue* sq) { if (!sq) return; sq->queue[0] = 0; sq->front = 0; sq->rear = 0; cout << "队列以清空" << endl; } //获取队列元素个数 void GetLength(SeqQueue* sq) { if (!sq) return; cout <<"队列元素个数:"<< sq->rear - sq->front << endl; } //打印 void outinput(SeqQueue* sq) { if (!sq || !isEMpty(sq)) { cout << "没有数据啦"; return; } else { for (int i = 0; i < sq->rear; i++) { cout << sq->queue[i] << "\t"; } cout << endl; cout <<"**********************************" << endl; } //if (isEMpty(sq) == 1) //{ // cout << "空值" << endl; // return; //} } int main(void) { SeqQueue* q = new SeqQueue; int data = -1; if (initQueue(q)) { cout << "初始化成功" << endl; if (!isEMpty(q)) { cout << "队列为空"; } int b = 66; for (int i = 0; i < 5; i++) { enterQueue(q, b); b = b + 10; } } cout << "队首元素是:" << getHead(q, &data) << endl; GetLength(q); outinput(q); CloseQueue(q); outinput(q); for (int i = 0; i < 10; i++) { if (DeleteQueue(q, &data)) cout << "出队数据是" << data << endl; else cout << "出队失败" << endl; } outinput(q); cin.get(); return 0; }