C++实现链队列相关操作代码
#include<iostream>
#include<cstdlib>
using namespace std;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
typedef int Status;
typedef int Elemtype;
typedef struct Qnode//链队列结点
{
Elemtype data;
struct Qnode* next;
}Qnode, * QueuePtr;//队列的结点指针
typedef struct//链队列类型
{
QueuePtr front;//队头指针
QueuePtr rear;//队尾指针
}linkQueue;//链队列
Status InitQueue(linkQueue& Q);//初始化一个不带头结点的空队列
Status CreatQueue(linkQueue& Q);//随即输入队列长度和队列整数型数据元素的值,创建一个链队列
Status EnQueue(linkQueue& Q, int e);//将一个数插入到队尾(x在程序运行时随即输入)
Status DeQueue(linkQueue& Q);//删除队头元素,并在删除后输出队头元素
Status GetQueue(linkQueue Q);//判断队列是否为空,若不空输出队头元素
Status LenQueue(linkQueue Q);//获得队列的长度
Status PrintQueue(linkQueue Q);//输出队列中的所有元素
int main(void)
{
linkQueue Q;
int x;
int k;
do {
cout << "\n*****链队列相关操作*****";
cout << "\n1.初始化一个不带头结点的空队列";
cout << "\n2.随机创建一个非空链队列";
cout << "\n3.将一个数x插入到队尾";
cout << "\n4.将队头元素删除,并输出元素的值";
cout << "\n5.输出队头元素";
cout << "\n6.求链队列的长度";
cout << "\n7.输出队列中所有的元素";
cout << "\n0.结束相关操作";
cout << "\n输入想要进行相关操作的序号:";
cin >> k;
switch (k)
{
case 1:
{
if (InitQueue(Q))
cout << "初始化成功。\n" << endl;
else
cout << "初始化失败。\n" << endl;
break;
}
case 2:
{
if (CreatQueue(Q))
{
cout << "创建成功。\n";
}
else
{
cout << "创建失败。\n";
}
break;
}
case 3:
{
cout << "输入想要插入元素的数值x为:";
cin >> x;
if (EnQueue(Q, x)) cout << "插入成功。\n";
else cout << "插入失败。\n";
break;
}
case 4:
{
if (DeQueue(Q)) cout << "删除成功。\n";
else cout << "删除失败。\n";
break;
}
case 5:
{
if (GetQueue(Q)) cout << "输出成功。\n";
else cout << "输出失败。\n";
break;
}
case 6:
{
if (LenQueue(Q)) cout << "长度获取成功。\n";
else cout << "长度获取失败。\n";
break;
}
case 7:
{
if (PrintQueue(Q)) cout << "全部输出成功。\n";
else cout << "全部输出失败。\n";
break;
}
}
} while (k != 0);
return OK;
}
Status InitQueue(linkQueue& Q)
{
Q.front = Q.rear = new Qnode;//生成头结点
Q.front->next = NULL;//头结点指针域置空
return OK;
}
Status CreatQueue(linkQueue& Q)
{
int k = 0;
int t = 0;
QueuePtr p;
cout << "\n队列长度t为:";
cin >> t;
cout << "\n输入正整数值为:";
for (int i = 0; i < t; i++)
{
p = new Qnode;//生成一个新节点,重复使用
cin >> k;
p->data = k;//赋值给结点的数据域
p->next = NULL;//赋值给节点的指针域,每次入队都在队尾
Q.rear->next = p;
Q.rear = p;
}
return OK;
}
Status EnQueue(linkQueue& Q, int e)
{
QueuePtr p;
p = new Qnode;//生成新的节点,用来存放要插入的元素
p->data = e;
p->next = NULL;//插入的元素进入的是该队列的队尾,指针域被赋值为空
Q.rear->next = p;//将该结点插队到原队列队尾的指针域
Q.rear = p;//将尾指针改为插入的指针
return OK;
}
Status DeQueue(linkQueue& Q)
{
if (Q.front == Q.rear) return ERROR;//判断是否为空
QueuePtr p;
p = Q.front->next;//p指向该队列的队头元素,首元节点
int i;
i = p->data;//队头节点的数据域保存
Q.front->next = p->next;//将该队头结点指针域转换为原队列的下一个
if (Q.front == p) Q.rear = Q.front;//最有一个元素被删,队尾指针指向头节点
cout << "删除元素为" << i << endl;
delete p;//释放原队头元素的空间
return OK;
}
Status GetQueue(linkQueue Q)
{
if (Q.front == Q.rear) return ERROR;//判断是否为空
int k = 0;
k = Q.front->next->data;//将队头节点的数据域赋值给k
cout << "输出的队头元素为" << k << endl;
return OK;
}
Status LenQueue(linkQueue Q)
{
int k = 0;
QueuePtr p;
p = Q.front->next;//获取该队列有数据的队头元素
while (p != NULL)//遍历队列
{
k++;
p = p->next;
}
cout << "队列的长度为" << k << endl;
return OK;
}
Status PrintQueue(linkQueue Q)
{
if (Q.front == Q.rear) return ERROR;//判断是否为空
QueuePtr p;
p = Q.front->next;//获取该队列有数据的队头元素
while (p != NULL)
{
cout << p->data << " ";//遍历打印元素
p = p->next;
}
cout << endl;
return OK;
}
C++实现链队列相关操作代码的更多相关文章
- java 发送邮件 email相关操作代码测试,生成复杂格式邮件,发送邮件相关操作
项目源码下载:http://download.csdn.net/detail/liangrui1988/6720047 效果图: 相关代码: test1 package com.mail; impor ...
- linux消息队列相关操作
/* 发送消息队列 */ #include <stdio.h>#include <stdlib.h>#include <string.h>#include < ...
- java实现链队列
java实现链队列的类代码: package linkqueue; public class LinkQueue { class Element { Object elem; Element next ...
- 利用JAVA API远程进行HDFS的相关操作
学习HDFS有一段时间了,现在把自己总结的HDFS的相关操作代码展示给大家. 主要有HDFS的增删改查,文件的追加,windows本地文件的上传,hdfs文件的下载,文件重命名,创建目录,文件是否存在 ...
- C语言实现链队列的初始化&进队&出队
/*链表实现队列的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typed ...
- HDFS文件目录操作代码
分布式文件系统HDFS中对文件/目录的相关操作代码,整理了一下,大概包括以下部分: 文件夹的新建.删除.重命名 文件夹中子文件和目录的统计 文件的新建及显示文件内容 文件在local和remote间的 ...
- java文件夹相关操作 演示样例代码
java文件夹相关操作 演示样例代码 package org.rui.io; import java.io.File; import java.io.FilenameFilter; import ja ...
- 42 github 开源代码 ——README.md语法/相关操作等
0 引言 最近在github上开源了pro/E二次开发的代码,发现README.md的编辑方式很有趣,需要稍微了解一下. 1 markdown语法 参考了两篇博客的内容,链接如下. https://b ...
- Linux TCP队列相关参数的总结 转
在Linux上做网络应用的性能优化时,一般都会对TCP相关的内核参数进行调节,特别是和缓冲.队列有关的参数.网上搜到的文章会告诉你需要修改哪些参数,但我们经常是知其然而不知其所以然,每次照抄过 ...
- Linux TCP队列相关参数的总结
作者:阿里技术保障锋寒 原文:https://yq.aliyun.com/articles/4252 摘要: 本文尝试总结TCP队列缓冲相关的内核参数,从协议栈的角度梳理它们,希望可以更容易的理解和记 ...
随机推荐
- CH334、CH335USB2.0Hub芯片(更新ing)
USB HUB又称USB集线器,主要用于USB主机端口扩展,广泛应用于计算机,笔记本,及周边应用.CH334.CH335是符合 USB2.0 协议规范的高性能MTT 4 端口 USB2.0 HUB ...
- Hexo博客搭建记录
Hexo博客搭建记录 参考视频:手把手教你从0开始搭建自己的个人博客 |无坑版视频教程 以下命令操作建议使用管理员权限完成 1. nodejs & hexo 安装 1.首先下载node.js, ...
- 使用动态输出打印内核的DEBUG信息
简介 printk()是很多嵌入式开发者喜欢用的调试手段之一,但是,使用printk()每次都要重新编译内核,很不方便.使用动态输出在不需要重新编译内核的情况下,方便的打印出内核的debug信息. 要 ...
- C++Vector源码解析(侯捷STL)
vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新的元素.vector的实现技术,关键在于对大小的控制以及重新配置时的数据移动效率. 一.vector的数据结构 vector采 ...
- Node.js学习笔记----day04
认真学习,认真记录,每天都要有进步呀!!! 加油叭!!! 一.Express 原生的http在某些方面上不足以满足我们的开发需求,所以我们需要使用框架来提高我们的开发效率,框架的目的就是提高开发效率, ...
- python学习第七周总结
C/S模块 1C/S模块: 1.1Client:客户端:客户端也就是你这一端可以接收到的程序,手机app,web网页等,我们可以在客户端页面上向度武器发送请求以及数据,交给服务器处理. 1.2Serv ...
- 工具-使用org.openjdk.jol查看对象在内存中的布局
1 添加依赖 <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core& ...
- 亲测有效! TG Pro 实时温度工具 V2.7.6 for mac 破解版
亲测有效! TG Pro 实时温度工具 V2.7.6 for mac 破解版 TG Pro (Temperature Gauge Pro) 是一款专业显示你的Mac实时温度的软件,可以在系统内的菜单栏 ...
- 使用 shell 脚本拼接 srt 字幕文件 (srtcat)
背景 前段时间迷上了做 B 站视频,主要是摩托车方面的知识分享.做的也比较粗糙,就是几张图片配上语音和字幕进行解说.尝试过自己解说,发现录制视频对节奏的要求还是比较高的,这里面水太深把握不住.好在以 ...
- Cannot find module ‘xxx\node_modules\yorkie\bin\install.js‘
1.出现问题原因 安装一个新仓库代码的依赖包,如输入npm install或yarn install,出现如题错误 2.解决办法 1)升级node.js 下载地址:https://nodejs.org ...