【数据结构3-栈和队列】

news2024/10/5 14:35:21

数据结构3-栈和队列

  • 1 栈-特殊的线性表-先进后出
    • 1.1 栈的三个案例
  • 2 队列-与栈相反-先进先出
    • 2.1 队列的案例
  • 3 用C实现栈的代码:
  • 4 用C实现队列的代码

1 栈-特殊的线性表-先进后出

在这里插入图片描述

1.1 栈的三个案例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 队列-与栈相反-先进先出

在这里插入图片描述

2.1 队列的案例

在这里插入图片描述

3 用C实现栈的代码:

#define MAX_SIZE 100
typedef struct
{
    int data[MAX_SIZE];//栈的深度
    int top;//栈顶记录
} Stack;
//初始化
void init(Stack *stack)
{
    stack->top = -1;
}
int isEmpty(Stack *stack)
{
    return stack->top == -1;
}
int isFull(Stack *stack)
{
    return stack->top == MAX_SIZE - 1;
}
//入栈
void push(Stack *stack, int value)
{
    if (isFull(stack))
    {
        printf("Stack is full. Cannot push element.\n");
        return;
    }
    stack->data[++stack->top] = value;
}
//出栈
int pop(Stack *stack)
{
    if (isEmpty(stack))
    {
        printf("Stack is empty. Cannot pop element.\n");
        return -1;
    }
    return stack->data[stack->top--];
}

int main()
{
    Stack stack;
    init(&stack);

    push(&stack, 10);
    push(&stack, 20);
    push(&stack, 30);

    printf("Popped element: %d\n", pop(&stack));
    printf("Popped element: %d\n", pop(&stack));
    printf("Popped element: %d\n", pop(&stack));
    return 0;
}

4 用C实现队列的代码

#include <stdio.h>

#define MAX_SIZE 100

typedef struct {
    int data[MAX_SIZE];
    int front;
    int rear;
} Queue;
void initQueue(Queue *queue) {
    queue->front = 0;
    queue->rear = 0;
}
int isFull(Queue *queue) {
    return (queue->rear + 1) % MAX_SIZE == queue->front;
}
int isEmpty(Queue *queue) {
    return queue->front == queue->rear;
}
void enqueue(Queue *queue, int value) {
    if (isFull(queue)) {
        printf("Queue is full.\n");
        return;
    }
    queue->data[queue->rear] = value;
    queue->rear = (queue->rear + 1) % MAX_SIZE;
}
int dequeue(Queue *queue) {
    if (isEmpty(queue)) {
        printf("Queue is empty.\n");
        return -1;
    }
    int value = queue->data[queue->front];
    queue->front = (queue->front + 1) % MAX_SIZE;
    return value;
}
int main() {
    Queue queue;
    initQueue(&queue);
    enqueue(&queue, 1);
    enqueue(&queue, 2);
    enqueue(&queue, 3);
    
    printf("%d\n", dequeue(&queue));
    printf("%d\n", dequeue(&queue));
    printf("%d\n", dequeue(&queue));
    return 0;
}
  • 我们使用了一个结构体来表示队列,其中包含一个数组用于存储数据,以及两个指针front和rear分别指向队列的头部和尾部。
  • initQueue函数用于初始化队列
  • isFull函数用于判断队列是否已满
  • isEmpty函数用于判断队列是否为空
  • enqueue函数用于入队操作
  • dequeue函数用于出队操作
  • 可以根据需要修改MAX_SIZE的值来调整队列的最大容量。另外,如果队列已满时尝试入队或者队列为空时尝试出队,代码会输出相应的提示信息。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MCU最小系统晶振模块设计

单片机的心脏&#xff1a;晶振 晶振模块 单片机有两个心脏&#xff0c;一个是8M的心脏&#xff0c;一个是32.768的心脏 8M的精度较低&#xff0c;所以需要外接一个32.768khz 为什么是8MHZ呢&#xff0c;因为内部自带的 频率越高&#xff0c;精度越高&#xff0c;功耗越大&am…

引导过程与故障修复

一、Linux操作系统引导过程 1、引导过程总览 开机自检 检查硬件设备&#xff0c;检测出第一个能够引导系统的设备&#xff0c;比如硬盘或者光驱 MBR 引导 运行MBR扇区里的主引导程序GRUB 启动GRUB菜单 统读取GRUB配置文件(/boot/grub2/grub.cfg)获取内核的设置和位置&#xf…

国产主流数据库存储类型简析

国产数据库在技术架构上主要分为集中式、基于中间件分布式和原生分布式架构&#xff0c;衍生出集中式架构和分布式架构。那么在这些部署架构中&#xff0c;从数据分布的视角来看&#xff0c;在数据库中数据分布的形态是怎样的。本文将简要分析OceanBase、PolarDB、OpenGauss、G…

OpenMesh 网格平均曲率计算

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 根据 Laplace-Beltrami 算子与平均曲率法向的关系: 又根据余切 Laplace-Beltrami 算子的定义: 其中 Ai 为该点邻域面积,取 Voronoi cell 面积如下: 得到

jmeter及PTS压测介绍和使用

一、常用压测工具&#xff1a; loadrunner apache ab&#xff08;单接口压测最方便&#xff09; jmeter 阿里云PTS&#xff08;原生上传jmeter脚本进行压测&#xff09; 二、jmeter可以压测不同的协议和应用 web http https jdbc for database TCP 三、使用场景及优点 1、功能…

基于Python大数据的微博舆情分析,微博评论情感分析可视化系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

5.1 iHRM人力资源 - 员工管理

iHRM人力资源 - 员工管理 - 左右侧主体展示 文章目录 iHRM人力资源 - 员工管理 - 左右侧主体展示一、页面主体结构二、页面左树加载2.1 加载左树数据2.2 记录树的切换节点 三、右侧员工列表3.1 列表结构3.2 员工数据获取3.3 头像和聘用形式3.4 数据分页3.5 员工模糊搜索 一、页…

ssm055基于spring框架的中小企业人力资源管理系统的设计及实现+jsp

中小企业人力资源管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本中小企业人力资源管理系统就是在这样的大环境下诞生&#xff0c;其可…

基于SpringBoot+Vue的装饰工程管理系统(源码+文档+包运行)

一.系统概述 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统装饰工程项目信息管理难度大&#xff0c;容错率低&a…

5.2 iHRM人力资源 - 员工管理 - 使用文件导入导出员工

iHRM人力资源 - 员工管理 - 导入导出员工 文章目录 iHRM人力资源 - 员工管理 - 导入导出员工一、员工导出Excel二、员工导入Excel2.1 Excel导入组件封装2.2 下载导入模板2.3 Excel 导入功能 三、删除员工 一、员工导出Excel 这个地方涉及一个接口二进制流blob 就是下面这一大片…

力扣HOT100 - 234. 回文链表

解题思路&#xff1a; class Solution {public boolean isPalindrome(ListNode head) {List<Integer> list new ArrayList<Integer>();// 将链表的值复制到数组中ListNode cur head;while (cur ! null) {list.add(cur.val);cur cur.next;}// 使用双指针判断是否…

力扣hot100:136. 只出现一次的数字 及其衍生

文章目录 一、LeetCode&#xff1a;136. 只出现一次的数字 使用到的异或运算的特点&#xff1a; 两个相同的数异或&#xff0c;结果为0 一、LeetCode&#xff1a;136. 只出现一次的数字 LeetCode&#xff1a;136. 只出现一次的数字 这里数组nums的特点是&#xff0c;除了一…

线程控制及线程底层原理

thread id 本质是一个地址。 以十六机制打印id。 线程终止的两种方法。 1.直接return&#xff1b; 2.pthread_exit(); 注意exit()是用来终止进程的&#xff0c;不能用于线程。 那怎么获取线程的返回值呢&#xff1f; 首先&#xff0c;和进程一样&#xff0c;线程退出也需要…

Python 入门指南(一)

原文&#xff1a;zh.annas-archive.org/md5/97bc15629f1b51a0671040c56db61b92 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 这个学习路径帮助你在 Python 的世界中感到舒适。它从对 Python 的全面和实用的介绍开始。你将很快开始在学习路径的第一部分编写程序…

2024年阿里云4核8G配置云服务器价格低性能高!

阿里云4核8G服务器租用优惠价格700元1年&#xff0c;配置为ECS通用算力型u1实例&#xff08;ecs.u1-c1m2.xlarge&#xff09;4核8G配置、1M到3M带宽可选、ESSD Entry系统盘20G到40G可选&#xff0c;CPU采用Intel(R) Xeon(R) Platinum处理器&#xff0c;阿里云优惠 aliyunfuwuqi…

基于docker的Jenkin的服务平台搭建

项目拓扑图 项目环境: jenkins-2.440 sonarqube-9.9.4 apache-maven-3.9.6 gitlab-ce-12.4.2 java17 docker20 harbor.v2.6.0 centos7.9 项目目的: 模拟企业构建一个流行的持续集成和持续部署环境,可以更轻松地创建和管理构建环境&#xff0c;实现自动化构建和部署应用程序的…

大模型开发轻松入门——(1)从搭建自己的环境开始

pip install openai import openai import osfrom dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv())openai.api_key os.getenv(OPENAI_API_KEY)

3d模型怎么全是网格?---模大狮模型网

在进行3D建模或场景设计时&#xff0c;有时会遇到一个普遍问题&#xff0c;即所见的3D模型表面全是由网格组成&#xff0c;而没有显示实际的表面纹理或颜色。这可能会导致困惑和挫败感&#xff0c;阻碍项目的进展。本文将深入探讨这一现象背后的原因&#xff0c;并提供多种解决…

2024九章云极DataCanvas智算操作系统新品发布会震撼来袭!

从大模型到智能算力&#xff0c;从“数字中国”到“新质生产力”……在技术突破和时代引领双轮驱动下&#xff0c;人工智能技术应用不断刷新全社会的认知&#xff0c;人工智能产业机遇席卷而来、发展将颠覆想象。随着AIGC和大模型的快速发展&#xff0c;建设拥有“卓越算力”和…

Chrome修改主题颜色

注意&#xff1a;自定义Chrome按钮只在搜索引擎为Google的时候出现。