【海贼王的数据航海】栈和队列

目录

1 -> 栈

1.1 -> 栈的概念及结构

1.2 -> 栈的实现

1.2.1 -> Stack.h

1.2.2 -> Stack.c

1.2.3 -> Test.c

2 -> 队列

2.1 -> 队列的概念及结构

2.2 -> 队列的实现

2.2.1 -> Queue.h

2.2.2 -> Queue.c


1 -> 栈

1.1 -> 栈的概念及结构

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。

压栈:栈的插入操作叫进栈/压栈/入栈,入数据在栈顶。

出栈:栈的删除操作叫做出栈。出数据也在栈顶。

1.2 -> 栈的实现

栈的实现一般可以使用数组或链表实现,相对而言数组的结构实现更优。因为数组在尾上插入数据的代价比较小。

1.2.1 -> Stack.h

#pragma once#define  _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
#include <assert.h>
#include <stdbool.h>// 定长的静态栈的结构,实际中一般不实用
//typedef int STDataType;
//#define N 10
//typedef struct Stack
//{
//	STDataType a[N];
//	int top;
//}ST;// 动态增长的栈
typedef int STDataType;
typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;// 栈的初始化
void STInit(ST* pst);// 栈的销毁
void STDestroy(ST* pst);// 入栈
void STPush(ST* pst, STDataType x);// 出栈
void STPop(ST* pst);// 获取栈顶元素
STDataType STTop(ST* pst);// 判空
bool STEmpty(ST* pst);// 栈的有效元素个数
int STSize(ST* pst);

1.2.2 -> Stack.c

#include "Stack.h"// 栈的初始化
void STInit(ST* pst)
{assert(pst);pst->a = NULL;pst->top = 0;pst->capacity = 0;
}// 栈的销毁
void STDestroy(ST* pst)
{assert(pst);free(pst->a);pst->a = NULL;pst->top = 0;pst->capacity = 0;
}// 入栈
void STPush(ST* pst, STDataType x)
{if (pst->top == pst->capacity){int newCapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;STDataType* tmp = (STDataType*)realloc(pst->a, newCapacity * sizeof(STDataType));if (tmp == NULL){perror("realloc fail");return;}pst->a = tmp;pst->capacity = newCapacity;}pst->a[pst->top] = x;pst->top++;
}// 出栈
void STPop(ST* pst)
{assert(pst);assert(!STEmpty(pst));pst->top--;
}// 获取栈顶元素
STDataType STTop(ST* pst)
{assert(pst);assert(!STEmpty(pst));return pst->a[pst->top - 1];
}// 判空
bool STEmpty(ST* pst)
{assert(pst);return pst->top == 0;
}// 栈的有效元素个数
int STSize(ST* pst)
{assert(pst);return pst->top;
}

1.2.3 -> Test.c

#include "Stack.h"void Test1()
{ST st;STInit(&st);STPush(&st, 1);STPush(&st, 2);printf("%d\n", STTop(&st));STTop(&st);STPush(&st, 3);STPush(&st, 4);STPush(&st, 5);while (!STEmpty(&st)){printf("%d ", STTop(&st));STPop(&st);}STDestroy(&st);
}int main()
{Test1();return 0;
}

2 -> 队列

2.1 -> 队列的概念及结构

队列:只允许一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)。

入队列:进行插入操作的一端称为队尾

出队列:进行删除操作的一端称为队头

2.2 -> 队列的实现

队列也可以用数组和链表的结构实现,使用链表的结构实现更优,因为如果使用数组的结构,出队列在数组头上出数据,效率较低。

2.2.1 -> Queue.h

#pragma once#define  _CRT_SECURE_NO_WARNINGS 1#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>// 链式结构: 表示队列
typedef int QDataType;typedef struct QueueNode
{struct QueueNode* next;QDataType data;
}QNode;typedef struct Queue
{QNode* phead;QNode* ptail;int size;
}Queue;// 队列的初始化
void QueueInit(Queue* pq);// 队列的销毁
void QueueDestroy(Queue* pq);// 队尾入队列
void QueuePush(Queue* pq, QDataType x);// 队头出队列
void QueuePop(Queue* pq);// 获取队头元素
QDataType QueueFront(Queue* pq);// 获取队尾元素
QDataType QueueBack(Queue* pq);// 获取队列中有效元素个数
int QueueSize(Queue* pq);// 判空
bool QueueEmpty(Queue* pq);

2.2.2 -> Queue.c

#include "Queue.h"// 队列的初始化
void QueueInit(Queue* pq)
{assert(pq);pq->phead = NULL;pq->ptail = NULL;pq->size = 0;
}// 队列的销毁
void QueueDestroy(Queue* pq)
{assert(pq);QNode* cur = pq->phead;while (cur){QNode* next = cur->next;free(cur);cur = next;}pq->phead = NULL;pq->ptail = NULL;pq->size = 0;
}// 队尾入队列
void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL){perror("malloc fail");return;}newnode->data = x;newnode->next = NULL;if (pq->ptail == NULL){assert(pq->phead == NULL);pq->phead = newnode;pq->ptail = newnode;}else{pq->ptail->next = newnode;pq->ptail = newnode;}pq->size++;
}// 队头出队列
void QueuePop(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));if (pq->phead->next == NULL){free(pq->phead);pq->phead = NULL;pq->ptail = NULL;}else{QNode* next = pq->phead->next;free(pq->phead);pq->phead = next;}pq->size--;
}// 获取队头元素
QDataType QueueFront(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->phead->data;
}// 获取队尾元素
QDataType QueueBack(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->ptail->data;
}// 获取队列中有效元素个数
int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}// 判空
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->size == 0;
}

感谢各位大佬支持!!!

互三啦!!!

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

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

相关文章

如何缩小你和大厂UI设计师之间的差距?重点关注你的作品集!

据说金三银四&#xff0c;在新一轮招聘旺季到来之前&#xff0c;你做过UI作品集吗&#xff1f;一个好的作品集可以为你的面试增加很多分数&#xff01;在开始之前&#xff0c;分享五个适合交互设计作品集的软件&#xff1a; 一、即时设计 这是一款专门为UI设计而设计的在线矢…

多线程(volatile)

volatile的功能 保证内存可见性禁止指令重排序 内存可见性 简单的理解 两(多)个线程同时针对一个变量进行操作, 一个线程读, 一个线程修改, 此时读到的值不一定是修改过后的值 即读线程没有感知到变量的变化 (其实是 编译器/JVM 对于代码在多线程情况下的优化进行了误判) 从 J…

maven父工程

maven父工程 一般最上面是定义的属性然后是版本管理然后是模块聚合 父工程一般只需要留一个pom.xml文件就行了。 父工程主要是用于版本管理和模块聚合。 一般最上面是定义的属性 属性中写的是各个依赖的版本&#xff0c;方便下面引用。 <properties><java.version&…

【Python】-闲聊:如何系统的自学Ptyhon

如何系统地自学Python 学习Python需要有一个系统的计划和策略&#xff0c;这样才能有效地掌握这门语言。下面是一个自学Python的指南&#xff0c;包括方法、实际例子和建议&#xff0c;适合新人小白&#xff0c;老手请绕过。 一、确定学习目标 在开始学习之前&#xff0c;首…

OD_2024_C卷_200分_3、电脑病毒感染【JAVA】【图论 / 单源最短路径(dijkstra)】

题目描述 一个局域网内有很多台电脑&#xff0c;分别标注为 0 ~ N-1 的数字。相连接的电脑距离不一样&#xff0c;所以感染时间不一样&#xff0c;感染时间用 t 表示。 其中网络内一台电脑被病毒感染&#xff0c;求其感染网络内所有的电脑最少需要多长时间。如果最后有电脑不…

Linux:设置别名命令alias

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 在Linux中alias命令用于为一串字符&#xff08;常代表命令&#xff09;设置一个别名&#xff0c;该别名在Bash读取并解析一行命令时会被展开。 下面是该命令的语法。 用…

github(不是git啊)操作记录(踩坑)

专栏介绍与文章目录-CSDN博客 github是程序员绕不开的东西。 网站打不开&#xff1f; 向雇主或有关部门申请合法信道连接互联网。 明明账号密码都对却登录失败&#xff1f; 向雇主或有关部门申请合法信道连接互联网。 重置密码失败&#xff1f; 向雇主或有关部门申请合法信道…

【DRAM存储器二十三】DDR4介绍-DDR4相对DDR3的变化、框图

👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 参考资料:《镁光DDR4数据手册》 、《JESD79-4B》 终于到DDR4了,DDR4在当下应用还比较广泛,所以这部分准备多花点时间整理。 DDR4相对DDR3的变化 老规矩,先从DDR4的…

BOM

文章目录 1. BOM概述1.1 什么是BOM1.2 BOM构成 2. window 的常见对象2.1 窗口加载事件2.2 调整窗口大小事件 3. 定时器3.1 setTimeout()3.2 停止 setTimeout() 定时器3.3 setInterval()*案例--倒计时效果 3.4 清除setInterval() 定时器*案例--发送短信 3.5 this 指向问题 4. JS…

二叉搜索树题目:恢复二叉搜索树

文章目录 题目标题和出处难度题目描述要求示例数据范围进阶 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 解法三思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;恢复二叉搜索树 出处&#xff1a;99. 恢复二叉搜索树 难度 5 级 题目描述 …

JAVA八股文面经问题整理第1弹

文章目录 目录 文章目录 提问问题 问题1 问题2 问题3 问题4 问题5 问题6 问题7 问题8 问题9 问题10 问题11 问题12 问题13 问题14 问题15 问题16 问题17 问题18 问题19 写在最后 提问问题 项⽬的⽤户数据怎么存储的&#xff0c;存储在哪⾥&#xff0c;⽤的什…

西门子PLC常用底层逻辑块分享_单/双输出电机

文章目录 前言一、功能概述二、单输出电机程序编写1.创建自定义数据类型2.创建FB功能块“单输出电机”3.编写程序 三、双输出电机程序编写1.创建自定义数据类型2.创建FB功能块“双输出电机”3.编写程序 前言 本文分享一个自己编写的电机控制逻辑块。 一、功能概述 手动状态、…

C语言(循环)单元练习

一、单项选择题 1、以下程序段中与语句ka>b?(b>c?1:0):0&#xff1b;功能等价的是__A____。 A. if((a>b)&&(b>c)) k1; B. if((a>b)||(b>c)) k1 else k0; else k0; C. if(a<b) k0; D. if(a>b)…

2024年1月粮油调味行业分析(TOP品牌/店铺/商品销售数据分析)

鲸参谋监测的某东1月份粮油调味市场销售数据已出炉&#xff01; 根据鲸参谋电商数据分析平台显示&#xff0c;今年1月份&#xff0c;某东平台上粮油调味品的销量约6200万件&#xff0c;环比上个月增长45%&#xff0c;同比去年下滑15%&#xff1b;销售额约25亿元&#xff0c;环…

Android 监听卫星导航系统状态及卫星测量数据变化

源码 package com.android.circlescalebar;import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import android.Manifest; import android.conte…

后渗透--利用ebpf隐藏后门用户

原理 首先我们要搞清楚ssh登陆的流程 先获取到ssh的pid 然后利用strace strace -f -p 830可以看到他打开了/etc/passwd去读取内容 那么我们的思路就很简单&#xff0c;hook ssh进程的read syscall exit,然后篡改返回内容 代码 ebpf // build ignore#include "my…

LeetCode2115. 从给定原材料中找到所有可以做出的菜

拓扑排序 题面 题目链接&#xff1a;2115. 从给定原材料中找到所有可以做出的菜 - 力扣&#xff08;LeetCode&#xff09; 你有 n 道不同菜的信息。给你一个字符串数组 recipes 和一个二维字符串数组 ingredients 。第 i 道菜的名字为 recipes[i] &#xff0c;如果你有它 所有…

Linux Centos7 服务器局域网集群使用 NTP 同步时间

服务器环境&#xff1a;Centos7 IP域名192.168.1.101node1192.168.1.102node2192.168.1.103node3 下载 ntp 依赖包 包名驱动网站下载百度云下载autogen-liboptsautogen-libopts-5.18-5.el7.x86_64.rpm提取码&#xff1a;1234 autogen-libopts-5.18-5.el7.x86_64.rpmntpdatentpd…

html5cssjs代码 018颜色表

html5&css&js代码 018颜色表 一、代码二、效果三、解释 这段代码展示了一个基本的颜色表&#xff0c;方便参考使用&#xff0c;同时也应用了各种样式应用方式。 一、代码 <!DOCTYPE html> <html lang"zh-cn"> <head><title>编程笔记…

速卖通安全测评补单技术提升运营安全性

对于一个新品来说&#xff0c;最大的问题就是评论。没有评论&#xff0c;你的广告就不能打的很靠前&#xff0c;那样你的转化率就会非常低&#xff0c;数据也很差。新品运气不好的来两个一星差评&#xff0c;链接可能就此废掉&#xff0c;做不上去了。所以虽然平台管的非常的严…