当前位置: 首页 > news >正文

c语言数据结构--链队列

实验内容:

用链式存储结构,实现教材定义的队列的基本操作。

实验步骤:

(1)按照实验要求编写代码,构造队列。
(2)输入验收用例,验证其输出结果。

#include <iostream>
#include <bits/stdc++.h>
#define OK 1
#define ERROR 0
using namespace std;typedef int QElemType;
typedef int Status;typedef struct QNode{QElemType data;struct QNode *next;
}QNode,*QueuePtr;typedef struct{QueuePtr front;QueuePtr rear;
}LinkQueue;void Help()
{cout << "1.初始化队列" << endl;cout << "2.销毁队列" << endl;cout << "3.清空队列" << endl;cout << "4.判断队列是否为空" << endl;cout << "5.返回队列元素个数" << endl;cout << "6.返回队列对头元素" << endl;cout << "7.插入新的队尾元素" << endl;cout << "8.删除对头元素" << endl;cout << "9.初始化并创建队列" << endl;cout << "10.输出队列元素" << endl;cout << "11.退出" << endl;  
}//初始化队列
Status InitQueue(LinkQueue &Q)
{Q.front=Q.rear=new QNode;Q.front->next=NULL;return OK;
}//销毁队列
Status DestroyQueue(LinkQueue &Q)
{while(Q.front){Q.rear=Q.front->next;delete Q.front;Q.front=Q.rear;}cout << "已销毁队列" << endl;return OK;
}//清空队列
Status Clear(LinkQueue &Q)
{QueuePtr p,q;p=Q.front;while(p!=Q.rear){q=p->next;delete p;p=q;}Q.front=Q.rear;return OK;
}//判断队列是否为空
bool QueueEmpty(LinkQueue Q)
{return (Q.front==Q.rear);
}//返回队列元素个数
int Length(LinkQueue Q)
{QueuePtr p;p=Q.front->next;int count=0;while(p){count++;p=p->next;}return count;
}//返回队列对头元素
Status GetHead(LinkQueue Q,QElemType &e)
{if(Q.front==Q.rear)return ERROR;e=Q.front->next->data;return OK;
}//插入新的队尾元素
Status EnQueue(LinkQueue &Q,QElemType e){QueuePtr p=new QNode;p->data=e;p->next=NULL;Q.rear->next=p;//修改队尾节点指针Q.rear=p;//移动队尾指针return OK;}//删除对头元素
Status DeQueue(LinkQueue &Q,QElemType &e)
{if(Q.front==Q.rear)return ERROR;QueuePtr p=Q.front->next;e=p->data;Q.front->next=p->next;if(Q.rear==p)Q.rear=Q.front;delete p;return OK;
}//初始化并创建队列
Status Create_Insert(LinkQueue &Q,QElemType n)
{InitQueue(Q);QElemType m[n];for(int i=0;i<n;i++){cin >> m[i];}for(int i=0;i<n;i++){EnQueue(Q,m[i]);}return OK;
}//输出队列元素
void Print(LinkQueue Q)
{QueuePtr p;p=Q.front->next;while(p){cout << p->data << " " ;p=p->next;}
}int main()
{LinkQueue Q;Help();int n;bool flag=false;while(1){cout<<"请输入你的选择:";cin>>n;if(n==1){InitQueue(Q);cout << "初始化成功" << endl;flag=true;}else if(n==2){if(flag==false){cout << "请先初始化队列" << endl;}else{DestroyQueue(Q);flag=false;}}else if(n==3){if(flag==false){cout << "请先初始化队列" << endl;}else{Clear(Q);cout << "已清空队列" << endl;}}else if(n==4){if(flag==false){cout << "请先初始化队列" << endl;}else{if(QueueEmpty(Q))cout << "队列为空" << endl;elsecout << "队列非空" << endl;}}else if(n==5){if(flag==false){cout << "请先初始化队列" << endl;}else{cout << "该队列元素个数为:" << Length(Q) << endl;}}else if(n==6){if(flag==false){cout << "请先初始化队列" << endl;}else{QElemType e;if(GetHead(Q,e))cout << "对头元素为:" << e << endl;elsecout << "队列为空" << endl;}}else if(n==7){if(flag==false){cout << "请先初始化队列" << endl;}else{QElemType e;cout << "输入插入元素:";cin >> e;EnQueue(Q,e);cout << "插入成功" << endl;}}else if(n==8){if(flag==false){cout << "请先初始化队列" << endl;}else{QElemType e;if(!DeQueue(Q,e))cout << "队列为空" << endl;elsecout << "数据" << e << "已删除" << endl;}}else if(n==9){int m;cout << "插入数据数量:";cin >> n;cout << "请输入数据(数据之间空格隔开):";if(Create_Insert(Q,n))cout << "初始化并创建成功" << endl;flag=true;}else if(n==10){if(flag==false){cout << "请先初始化队列" << endl;}else{Print(Q);cout<<endl;}}else if(n==11){return 0;}else{cout << "操作有误" << endl;}}return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • DP学习——简单工厂模式
  • Flink 窗口触发器(Trigger)(二)
  • php简单商城小程序系统源码
  • 【普中】基于51单片机的矩阵电子密码锁LCD1602液晶显示 proteus仿真+程序+设计报告+讲解视频
  • 【内网渗透】内网渗透学习之域渗透常规方法
  • 深入了解Rokid UXR2.0 SDK内置的Unity AR Glass开发组件
  • Python强大的数据转换功能库之awswrangler使用详解
  • 读人工智能全传08人工智能的今天
  • 容联七陌智能客服助力企业出海无忧,拓展全球
  • 护佑未来!引领儿童安全新时代的AI大模型
  • Qt 线程同步机制 互斥锁 信号量 条件变量 读写锁
  • git 的cherry-pick选择性提交
  • YOLO主干增强作用及代码
  • OpenCV 车牌检测
  • 第15章 奇异值分解:习题解答及其案例
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • CAP 一致性协议及应用解析
  • Java到底能干嘛?
  • Linux CTF 逆向入门
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 阿里云Kubernetes容器服务上体验Knative
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 深度学习在携程攻略社区的应用
  • 新版博客前端前瞻
  • 用简单代码看卷积组块发展
  • 06-01 点餐小程序前台界面搭建
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • # centos7下FFmpeg环境部署记录
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • ${factoryList }后面有空格不影响
  • (16)Reactor的测试——响应式Spring的道法术器
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (pycharm)安装python库函数Matplotlib步骤
  • (编译到47%失败)to be deleted
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (南京观海微电子)——示波器使用介绍
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • **PHP分步表单提交思路(分页表单提交)
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .net framework 4.8 开发windows系统服务
  • .net 受管制代码
  • .net程序集学习心得