#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++实现链队列相关操作代码的更多相关文章

  1. java 发送邮件 email相关操作代码测试,生成复杂格式邮件,发送邮件相关操作

    项目源码下载:http://download.csdn.net/detail/liangrui1988/6720047 效果图: 相关代码: test1 package com.mail; impor ...

  2. linux消息队列相关操作

    /* 发送消息队列 */ #include <stdio.h>#include <stdlib.h>#include <string.h>#include < ...

  3. java实现链队列

    java实现链队列的类代码: package linkqueue; public class LinkQueue { class Element { Object elem; Element next ...

  4. 利用JAVA API远程进行HDFS的相关操作

    学习HDFS有一段时间了,现在把自己总结的HDFS的相关操作代码展示给大家. 主要有HDFS的增删改查,文件的追加,windows本地文件的上传,hdfs文件的下载,文件重命名,创建目录,文件是否存在 ...

  5. C语言实现链队列的初始化&进队&出队

    /*链表实现队列的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typed ...

  6. HDFS文件目录操作代码

    分布式文件系统HDFS中对文件/目录的相关操作代码,整理了一下,大概包括以下部分: 文件夹的新建.删除.重命名 文件夹中子文件和目录的统计 文件的新建及显示文件内容 文件在local和remote间的 ...

  7. java文件夹相关操作 演示样例代码

    java文件夹相关操作 演示样例代码 package org.rui.io; import java.io.File; import java.io.FilenameFilter; import ja ...

  8. 42 github 开源代码 ——README.md语法/相关操作等

    0 引言 最近在github上开源了pro/E二次开发的代码,发现README.md的编辑方式很有趣,需要稍微了解一下. 1 markdown语法 参考了两篇博客的内容,链接如下. https://b ...

  9. Linux TCP队列相关参数的总结 转

        在Linux上做网络应用的性能优化时,一般都会对TCP相关的内核参数进行调节,特别是和缓冲.队列有关的参数.网上搜到的文章会告诉你需要修改哪些参数,但我们经常是知其然而不知其所以然,每次照抄过 ...

  10. Linux TCP队列相关参数的总结

    作者:阿里技术保障锋寒 原文:https://yq.aliyun.com/articles/4252 摘要: 本文尝试总结TCP队列缓冲相关的内核参数,从协议栈的角度梳理它们,希望可以更容易的理解和记 ...

随机推荐

  1. [编程基础] C++多线程入门4-数据共享和资源竞争

    原始C++标准仅支持单线程编程.新的C++标准(称为C++11或C++0x)于2011年发布.在C++11中,引入了新的线程库.因此运行本文程序需要C++至少符合C++ 11标准. 4 数据共享和资源 ...

  2. (一)elasticsearch 编译和启动

    1.准备 先从github官网上clone elasticsearch源码到本地,选择合适的分支.笔者这里选用的是7.4.0(与笔者工作环境使用的分支一致),此版本编译需要jdk11. 2.编译 Re ...

  3. Python自动化结算工资和统计报表|编程一对一教学微信:Jiabcdefh

    实例需求说明 你好,我是悦创. 博客首发:https://bornforthis.cn/column/pyauto/auto_base07.html 学习了 Excel 文件的写入.读取和追加内容,那 ...

  4. js取不到iframe元素

    跨域 iframe 请绕道,下文是针对非跨域 iframe 的问题排除 1.iframe 取不到值的问题的原因 1. 父页面未加载完成 2. iframe 未加载完成 3. 语法使用错误 4. 跨域( ...

  5. A. Greatest Convex【Codeforces Round #842 (Div. 2)】

    A. Greatest Convex You are given an integer \(k\). Find the largest integer \(x\), where \(1≤x<k\ ...

  6. 华为运动健康服务Health Kit 6.9.0版本新增功能揭秘!

    华为运动健康服务(HUAWEI Health Kit)6.9.0版本新鲜出炉啦! 一文了解新增功能,快来一起加入Health Kit生态大家庭! 一.更丰富:睡眠呼吸记录健康数据开放 呼吸机是用于为患 ...

  7. 计组Review1

    1GB的内存,它是以字节编址的,假设内存地址为32位,128KB的高速缓存.现在有一个数据位于0x123456(字节编址),会映射到那些不同情形的内存单元上,还有TAG和总缓存大小. 1. 直接映射, ...

  8. absolute定位后居中的方法

    要求 : 子级需要加动画上下动起来,并且需要在全屏居中 html代码如下: <div class="row m-0 w-100 mybanner"> <!-- 左 ...

  9. 【随笔记】NDK 编译开源库 jsoncpp

    下载并解压源码 wget https://github.com/open-source-parsers/jsoncpp/archive/refs/tags/1.9.4.tar.gz -O jsoncp ...

  10. SQL Case条件判断SQL

    问题描述:在表中取到一些值做出判断,配合监控监测一些表中的数据.使用select case when if 来做条件查询判断 CASE 表达式遍历条件并在满足第一个条件时返回一个值(类似于 if-th ...