2条回答 默认 最新
- bostonAlen 2021-06-16 11:59关注
// 队列的链式存储结构 #include <iostream> #include <fstream> using namespace std; #define OK 1 #define ERROR 0 #define OVERFLOW -1 typedef char QElemType; typedef char SElemType; typedef int Status; // 队列链式存储结构类型 typedef struct QNode { QElemType data; struct QNode *next; }QNode,*QueuePtr; typedef struct { QueuePtr front; // 队头指针 QueuePtr rear; // 队尾指针 }LinkQueue; // 初始化链队 Status Init_Queue(LinkQueue &Q) { // 构造空队列Q Q.front = Q.rear = new QNode; // 生成新结点作为头结点,队头和队尾指针指向此结点 Q.rear->next = NULL; // 头结点的指针域设置为空 return OK; } // 入队 Status EnQueue(LinkQueue &Q, QElemType e) { // 插入元素e作为Q链队的新的队尾元素 QueuePtr p; p = new QNode; // 为入队元素分配结点存储空间,用指针p指向它 p->data = e; p->next = NULL; Q.rear->next = p; // 将新结点插入到队尾1 Q.rear = p; // 修改队尾指针 return OK; } // 出队 Status DeQueue(LinkQueue &Q, QElemType &e) { QueuePtr p; if (Q.rear == Q.front) return ERROR; // 若队列为空 p = Q.front->next; // p指向队头元素 e = p->data; // e保存队头元素的值 Q.front->next = p->next; // 修改头指针 if (Q.rear == p) Q.rear = Q.front; // 最后一个元素被删除,队尾指针指向队头结点 delete p; return OK; } // 获取队头元素 SElemType GetHead_Queue(LinkQueue Q) { if (Q.front != Q.rear) // 队列非空 return Q.front->next->data; // 返回队头元素的值,队头指针不变 } // 删除队列 void Del_Queue(LinkQueue *Q) { Q.front->next = NULL; Q.rear ->next = NULL; Q.front = Q.rear = NULL; Q = NULL; } int main() { int flag = 0, choose; LinkQueue Q; QElemType e, j; cout << "1.初始化链队 2.入队 3.读取队头元素 4.出队 5.清空队列 0.退出\n\n\n\n"; choose = -1; while (choose != 0) { cout << "请选择链队操作项[0-5]:"; cin >> choose; switch(choose) { case 1: if (Init_Queue(Q)) { flag = 1; cout << "链队初始化成功." << endl << endl; } else cout << "链队初始化失败." << endl << endl; break; case 2: { fstream file; file.open("QNode.txt"); if (!file) { cout << "文件打开失败.\n\n\n"; exit(ERROR); } if (flag) { flag = 1; cout << "链队入队元素依次为:\n"; while (!file.eof()) { file >> j; if (file.fail()) break; else { EnQueue(Q, j); cout << j << " "; } } cout << endl << endl; } else cout << "链队未创建成功,请重检测.\n\n\n"; file.close(); } break; case 3: if (flag != -1 && flag != 0) cout << "链队队头元素为:" << GetHead_Queue(Q) << endl << endl; else cout << "链队中没有此数据元素" << endl << endl; break; case 4: cout << "链队依次弹出的队头元素为:" << endl; while (DeQueue(Q, e)) { flag = -1; cout << e << " "; } cout << endl << endl << endl; break; case 5: Del_Queue(&Q); if(!Q) cout << "链队清空" << endl; break; } } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
- ¥15 活动选择题。最多可以参加几个项目?
- ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
- ¥15 vs2019中数据导出问题
- ¥20 云服务Linux系统TCP-MSS值修改?
- ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
- ¥20 怎么在stm32门禁成品上增加查询记录功能
- ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
- ¥50 NT4.0系统 STOP:0X0000007B
- ¥15 想问一下stata17中这段代码哪里有问题呀