C++实现队列类Queue详细代码

5星 · 超过95%的资源 需积分: 50 46 下载量 188 浏览量 更新于2024-09-10 收藏 2KB TXT 举报
"本文档提供了一个简单的C++实现的队列类Queue,包括了队列的基本操作:入队、出队、查看队首元素以及判断队列是否为空。" 在计算机科学中,队列是一种线性数据结构,遵循先进先出(First In First Out, FIFO)的原则。在这个C++实现中,我们定义了一个名为`queue`的类,包含了队列的基本元素和指针,用于维护队列的头部和尾部。类的私有成员变量包括一个整型数据`data`,表示队列元素的值,以及一个指向下一个队列元素的指针`next`。 类`queue`提供了以下方法: 1. `push()`:这个方法用于向队列中添加元素。用户输入一个整数,程序会创建一个新的队列节点并将其插入到队列的尾部。如果队列为空,新节点将同时成为队头和队尾。否则,新节点将被连接到当前队尾节点的`next`指针上。 2. `pop(queue*front)`:此方法用于移除队头元素并更新队列。它接受一个指向队头的指针,然后将队头指针移动到下一个元素,最后删除原队头节点。 3. `getfront(queue*front)`:这个方法用于获取但不移除队头元素。如果队列为空,它会输出提示信息“队列为空”。否则,它会输出队头元素的值。 4. `empty(queue*front)`:这个方法用于检查队列是否为空。如果队头和队尾指针相同,说明队列为空,程序会输出“队列为空”。否则,输出“队列非空”。 此外,注释掉的`getfrontnext(queue*front)`方法原本应该是用于获取队头元素的下一个元素,但在当前实现中并未使用。 在`main`函数中,程序提供了一个简单的交互式菜单,让用户选择执行的操作:入队、出队、查看队首元素或检查队列是否为空。通过这个例子,我们可以了解如何使用自定义的队列类来实现基本的队列操作,这对于理解和处理各种数据流问题非常有用,例如任务调度、打印作业管理和多线程同步等。
2016-04-22 上传
#include #include #include //队列最大长度 #define MAX_QUEUE 1024 //偷懒,就用静态队列了 static int mQueue[MAX_QUEUE]; //队列插入 void InsertData(int **Front, int **Rear) { if (*Rear + 1 == *Front && (*Rear + 1 - MAX_QUEUE != *Front)) { //当队列数据已满,返回 puts("Queue Size Overflow!\n"); return; } else if (*Rear - mQueue > MAX_QUEUE) { //实现的是类似循环队列,但由于是静态线性队列(数组) //而不是用链表来实现的,所以到静态队列(数组)尾部,尾指针自动指向(数组)头部 *Rear = mQueue; } puts("Input Data:"); scanf("%d", *Rear); //输入数据后,尾指针后移 *Rear += 1; } //从头指针删除一个队列中的数据 void DeleteData(int **Front, int **Rear) { if (*Front == *Rear) { //头指针尾指针重合,队列空,不能删除,返回 puts("Queue Empty!\n"); return; } else if (*Front - mQueue > MAX_QUEUE) { //参考 Rear *Front = mQueue; } //从头指针删除一个数据 *Front += 1; } //显示队列数据 void ShowData(int **Front, int **Rear) { int *temp; for (temp=*Front; temp!=*Rear; temp++) { printf("%d --> ", *temp); } puts("\n"); } void usage(void) { puts("1. Insert Data"); puts("2. Delete Data"); puts("3. Show Data"); } int main(int argc, char **argv) { //头指针,尾指针 //队列的一个特性 First in first out FIFO int *pFront, *pRear; int op_code; //初始化队列,头指针和尾指针此时指向的地址相同 pFront = pRear = mQueue; while (1) { usage(); scanf("%d", &op_code); switch (op_code) { case 1: printf("%p\n", pFront); printf("%d\n", *pFront); InsertData(&pFront, &pRear); break; case 2: DeleteData(&pFront, &pRear); break; case 3: ShowData(&pFront, &pRear); break; default: break; } } return 0; }