数据结构(c语言版) 队列

链队列

要求:实现链队列的创建、初始化、入队、出队 (先进先出)

代码

//
// Created by My.cy on 2023/10/19.
//
//链队列  创建、初始化、入队、出队   先进先出

#include <stdio.h>
#include <malloc.h>


//定义结构体
struct Node{
    int data;
    struct Node* next;
};

//将头指针和尾指针封装在一起
struct FR{
    struct Node* front;
    struct Node* rear;
};

//初始化
void init(struct Node* node, struct FR* fr){
    node->next = NULL;
    fr->front = node;
    fr->rear = node;
}

//入队
void inqueue(struct FR* fr, int value){
    struct Node* NewNode = malloc(sizeof(struct Node));
    if(NewNode){
        NewNode->data = value;
        NewNode->next = NULL;
        fr->rear->next = NewNode;
        fr->rear = NewNode;
        printf("数据 %d 入队成功,地址为 %p \n",value, NewNode);
    }
}

//显示队列
void isqueue(struct FR* fr){
    struct Node* temp = fr->front;
    while (temp->next != NULL){
        printf("%d-->", temp->next->data);
        temp = temp->next;
    }
}

//出队列
void outqueue(struct FR* fr){
    if(fr->front->next == NULL){
        printf("出队列失败:队列为空!\n");
    }

    struct Node* temp = fr->front->next;
    int value = temp->data;

    if(temp->next == NULL){
        fr->front->next = NULL;
        free(temp);
        printf("数据 %d 出队列成功!\n",value);
        return;
    }
    fr->front->next = temp->next;
    free(temp);
    printf("数据 %d 出队列成功!\n",value);

}

int main(){
    struct Node node;
    struct FR fr;
    //初始化
    init(&node, &fr);

    printf("*********************链队列入队操作*********************\n");
    int value;
    printf("请输入入队的数据(输入0则结束):");
    scanf("%d",&value);
    while (value != 0){
        inqueue(&fr, value);
        printf("请输入入队的数据(输入0则结束):");
        scanf("%d",&value);
    }

    printf("\n*********************链队列显示操作*********************\n");
    isqueue(&fr);

    printf("\n*********************链队列出栈操作*********************\n");
    int out;
    printf("出队列输入1,结束输入0:");
    scanf("%d",&out);
    while (1){
        if(out == 1){
            outqueue(&fr);
        }
        if(out == 0){
            break;
        }
        printf("出队列输入1,结束输入0:");
        scanf("%d",&out);
    }

    printf("\n*********************链队列显示操作*********************\n");
    isqueue(&fr);

    printf("\n*********************链队列入队操作*********************\n");
    int value_1;
    printf("请输入入队的数据(输入0则结束):");
    scanf("%d",&value_1);
    while (value_1 != 0){
        inqueue(&fr, value_1);
        printf("请输入入队的数据(输入0则结束):");
        scanf("%d",&value_1);
    }

    printf("\n*********************链队列显示操作*********************\n");
    isqueue(&fr);

}

运行结果

在这里插入图片描述

循环队列

要求:循环队列的 创建、入队列、出队列,显示队列 (计数器方法)

代码

//
// Created by My.cy on 2023/10/19.
//
//循环队列(计数器方法)     创建、入队列、出队列,显示队列       先进先出

#include <stdio.h>
#define MAXSIZE 5


struct C_S_Queue{
    int data[MAXSIZE];
    int front;
    int rear;
    int num;
};

//初始化
void init(struct C_S_Queue* CSQ){
    CSQ->front = 0;
    CSQ->rear = 0;
    CSQ->num = 0;
}

//入队列
void inQueue(struct C_S_Queue* CSQ, int value){
    if(CSQ->num == MAXSIZE){
        printf("入队列失败:队列为满队列!\n");
        return;
    }
    int index = CSQ->rear % MAXSIZE;
    CSQ->data[index] = value;
    CSQ->rear = (CSQ->rear + 1) % MAXSIZE;
    CSQ->num ++;
    printf("数据 %d 在数组的第 %d 位入队成功!\n",value, index+1);
}

//出队列
void outQueue(struct C_S_Queue* CSQ){
    if(CSQ->num == 0){
        printf("出队列失败:队列为空队列!\n");
        return;
    }
    int index = CSQ->front % MAXSIZE;
    int value = CSQ->data[index];
    CSQ->front = (CSQ->front + 1) % MAXSIZE;
    CSQ->num --;
    printf("数据 %d 出队列成功!\n", value);
}


//显示队列
void isQueue(struct C_S_Queue* CSQ){
    if(CSQ->num == 0){
        printf("显示队列失败:队列为空队列!\n");
        return;
    }
    int index = 1;
    int f = CSQ->front % MAXSIZE;

    while (index <= CSQ->num){
        printf("队列第 %d 位数据为 %d \n",index, CSQ->data[f]);
        f = (f+1)%MAXSIZE;
        index ++;
    }
}

int main(){
    struct C_S_Queue CSQ;
    //初始化
    init(&CSQ);

    printf("*********************循环队列入队操作*********************\n");
    int value;
    printf("请输入入队的数据(输入0则结束):");
    scanf("%d",&value);
    while (value != 0){
        inQueue(&CSQ, value);
        printf("请输入入队的数据(输入0则结束):");
        scanf("%d",&value);
    }

    printf("*********************显示循环队列操作*********************\n");
    isQueue(&CSQ);

    printf("*********************循环队列出队操作*********************\n");
    int out;
    printf("出队列输入1,结束输入0:");
    scanf("%d",&out);
    while (1){
        if(out == 1){
            outQueue(&CSQ);
        }
        if(out == 0){
            break;
        }
        printf("出队列输入1,结束输入0:");
        scanf("%d",&out);
    }

    printf("*********************显示循环队列操作*********************\n");
    isQueue(&CSQ);

    printf("*********************循环队列入队操作*********************\n");
    int value_1;
    printf("请输入入队的数据(输入0则结束):");
    scanf("%d",&value_1);
    while (value_1 != 0){
        inQueue(&CSQ, value_1);
        printf("请输入入队的数据(输入0则结束):");
        scanf("%d",&value_1);
    }

    printf("*********************显示循环队列操作*********************\n");
    isQueue(&CSQ);

}

运行结果

*********************循环队列入队操作*********************
请输入入队的数据(输入0则结束):123
数据 123 在数组的第 1 位入队成功!
请输入入队的数据(输入0则结束):23
数据 23 在数组的第 2 位入队成功!
请输入入队的数据(输入0则结束):34
数据 34 在数组的第 3 位入队成功!
请输入入队的数据(输入0则结束):445
数据 445 在数组的第 4 位入队成功!
请输入入队的数据(输入0则结束):142
数据 142 在数组的第 5 位入队成功!
请输入入队的数据(输入0则结束):0
*********************显示循环队列操作*********************
队列第 1 位数据为 123
队列第 2 位数据为 23
队列第 3 位数据为 34
队列第 4 位数据为 445
队列第 5 位数据为 142
*********************循环队列出队操作*********************
出队列输入1,结束输入01
数据 123 出队列成功!
出队列输入1,结束输入01
数据 23 出队列成功!
出队列输入1,结束输入00
*********************显示循环队列操作*********************
队列第 1 位数据为 34
队列第 2 位数据为 445
队列第 3 位数据为 142
*********************循环队列入队操作*********************
请输入入队的数据(输入0则结束):100
数据 100 在数组的第 1 位入队成功!
请输入入队的数据(输入0则结束):0
*********************显示循环队列操作*********************
队列第 1 位数据为 34
队列第 2 位数据为 445
队列第 3 位数据为 142
队列第 4 位数据为 100

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/127697.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“探秘!根据关键词搜索商品列表的虾皮API大揭露!“

要使用虾皮API根据关键词获取商品列表&#xff0c;您需要使用虾皮API的搜索功能。以下是使用Python和虾皮API根据关键词获取商品列表的基本步骤&#xff1a; 注册虾皮API账号并获取API凭证&#xff08;访问虾皮开放平台并创建应用以获取API凭证&#xff09;。安装必要的Python…

SPRINGBOOT整合CXF发布WEB SERVICE和客户端调用(用户和密码验证)

主要分为客户端和服务端 服务端 pom配置 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.3</version><relativePath/> <!-- lookup parent fro…

使用电脑上自带的软件进行远程连接

使用电脑上自带的软件进行远程连接 首先需要让你远程的电脑设置成允许远程连接 Windows R打开运行面板&#xff0c;然后输入sysdm.cpl命令&#xff0c;如下图&#xff1a; 选择“远程”选项卡&#xff0c;确保选中“允许远程连接到这台计算机”&#xff0c;如下图&#xff1…

如何在 Vue.js 中引入原子设计?

前言 原子设计是一种创建设计系统的方法&#xff0c;它将用户界面分解为可重用的小组件&#xff0c;即&#xff1a; Atoms 原子Molecules 分子Organisms 生物体Templates 模板Pages 页面 通过遵循模块化设计方法&#xff0c;原子设计可帮助团队创建一致、可缩放且可维护的 …

阻容降压电阻应用

公式&#xff1a;Xc1/2πfC 电流&#xff1a;IU/Xc 举例&#xff1a;1uf金属化聚丙烯膜电容的容抗是3184欧姆。电流是70ma。 实际应用中根据工作电流去倒推算电容。

Ionic组件 ion-avatar ion-icon ion-img ion-thumbnail

1 ion-avatar Avatars 是通常包裹 image or icon的圆形组件。它们可以用来表示一个person or an object。 Avatars 可以自己使用&#xff0c;也可以在任何元素内部使用。如果放置在ion-chip or ion-item内部&#xff0c;avatar 将调整大小以适应父组件。要将avatar 定位在item…

Ceph文件存储

1、存储基础 //单机存储设备 ●DAS&#xff08;直接附加存储&#xff0c;是直接接到计算机的主板总线上去的存储&#xff09; IDE、SATA、SCSI、SAS、USB 接口的磁盘 所谓接口就是一种存储设备驱动下的磁盘设备&#xff0c;提供块级别的存储 ●NAS&#xff08;网络附加存储&…

酷安官网下载页前端自适应源码

酷安官网下载页前端自适应源码&#xff0c;自己拿走玩玩 站长只打开看了一眼&#xff0c;感觉风格还不错&#xff0c;纯html&#xff0c;自己魔改 转载自 https://www.qnziyw.cn/wysc/qdmb/24470.html

Python + UnitTest 软件测试流程总结

以测试用户登录流程为例&#xff1a; TestCase&#xff1a; TestCase 主要用来编写测试用例&#xff0c;这里结合 断言&#xff08;assertEqual 和 assertIn&#xff09; 进行判断&#xff0c;避免了手动书写判断。 # tools.py # 登录验证方法 def login(username, password…

Vue入门教学——编写第一个页面

以Vue2.0为例子。 1、创建一个Vue项目 创建过程&#xff1a;Vue-cli&#xff08;脚手架&#xff09;的创建_vue脚手架创建项目命令-CSDN博客【注】项目名不能有大写字母。创建完毕后&#xff0c;使用VSCode打开项目文件夹&#xff08;其他编辑器也行&#xff09;。 2、运行项…

浅析高校用电问题及智慧电力监管平台的构建

安科瑞 崔丽洁 摘 要&#xff1a;介绍了当前高校用电存在的问题&#xff0c;进行了原因分析&#xff0c;由此提出建立高校用电智慧监管平台。对高校用电智慧监管平台的构架进行设计&#xff0c;运用物联网技术&#xff0c;实现各回路实时自主控制&#xff0c;并细化管理权限&a…

50代码审计-PHP无框架项目SQL注入挖掘

代码设计分为有框架和无框架 挖掘技巧&#xff1a;随机挖掘&#xff0c;定点挖掘&#xff0c;批量挖掘&#xff08;用工具帮助扫描探针&#xff0c;推荐工具&#xff1a;fortify&#xff0c;seay系统&#xff09;。 1.教学计划&#xff1a; ---审计项目漏洞 Demo->审计思…

打印流详解

概述 作用&#xff1a;打印流可以实现方便、高效的打印数据到文件中去。 高效体现在用到了缓冲流&#xff1a; public PrintStream(OutputStream out, boolean autoFlush, Charset charset) {super(out);this.autoFlush autoFlush;this.charOut new OutputStreamWriter(thi…

ObjectMapper - 实现复杂类型对象反序列化(天坑!)

目录 一、复杂类型反序列化 1.1、背景 1.2、问题解决 一、复杂类型反序列化 1.1、背景 a&#xff09;例如有 AppResult 对象&#xff0c;如下&#xff1a; Data public class AppResult {private Integer code;private String msg;private Object data;} b&#xff09;App…

建设银行余额生成器,工商农业邮政招商中国模版,易语言画板+编辑框实现截图

今天闲着没事干用易语言画板快照命令开发了一个虚拟余额生成器&#xff0c;当然我加了水印&#xff0c;模版上面都加了水印的&#xff0c;仅仅提供娱乐的效果&#xff0c;做不了啥事&#xff0c;然后软件主要就是画板上面加入了固定的模版图&#xff0c;图片的话你可以自己网上…

【React入门实战】实现Todo代办

文章目录 效果功能-状态管理相关接口定义相关方法定义 UIinput输入框&#xff1a;回车添加todo标题列表列表项Main 总体代码 非常简单入门的react-todo练习&#xff0c;代码写的很小白。 效果 技术栈&#xff1a;react-typeScript 数据分为代办Todo和已办完Done&#xff0c;可…

西门子S7-1200PLC混合通信编程(ModbusTcp和UDP通信)

S7-1200PLC的MODBUS-TCP通信 西门子PLC ModbusTcp通信访问网关后从站(SCL语言轮询状态机)-CSDN博客文章浏览阅读305次。西门子PLC的ModbusTcp通信在专栏已有很多文章介绍,所不同的是每个项目的通信需求都略有不同,今天我们以访问网关后的三个从站数据来举例,给出轮询的推荐…

WPS的JS宏基础(一)

基础知识 1、简单的第一个宏 //注意function只能全部用小写 function demo(){alert("你好!") }2、录制宏生成工资条 function 使用录制宏自动生成代码以JS宏为例()//使用相对引用 {Selection.Copy(undefined);ActiveCell.Offset(5, 0).Range("A1:M4").I…

Java进击框架:Spring-数据存取(七)

Java进击框架&#xff1a;Spring-数据存取&#xff08;七&#xff09; 前言事务管理声明式事务管理 DAO支持JDBC的数据访问使用JdbcTemplate控制数据库连接JDBC批处理操作封装 SQL 语句中的参数 使用R2DBC进行数据访问对象关系映射(ORM)数据访问HibernateJPA XML模式 前言 参考…

【免费送书】写博客模板

【点我-这里送书】 本人详解 作者&#xff1a;王文峰&#xff0c;参加过 CSDN 2020年度博客之星&#xff0c;《Java王大师王天师》 公众号&#xff1a;JAVA开发王大师&#xff0c;专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生&#xff0c;期待你的…