栈及笔试题

news2024/12/23 8:57:45

目录

栈的实现

1、数组栈

2、链式栈

栈的创建

栈的打印

内存泄漏

栈溢出

练习

有效的括号


栈的实现

栈后入先出

1、数组栈

最佳实现,且访问数据的时候CPU告诉访存命中率比较高,因为地址连续存放,访问时CPU从cache里一次访问一片)

数组适合尾插尾删,所以栈底在数组头部

2、链式栈

双向链表,栈底可以是尾也可以是头

单链表,头插头删方便,所以栈顶在链表尾部

(单链表的头插头删方便在:

        头插:加减新节点只需要修改头指针指向新的节点,时间复杂度通常是O(1)

        尾插:需要遍历整个链表才能找到最后一个节点并将其之后的位置设置为新节点或者释放结点,时间复杂度是O(n)

栈的创建

栈的打印

以下是单链表的打印

此为栈的打印

栈访问一遍就已经空了

内存泄漏

后端开发,比如游戏上线了之后除了升级就不能退出,所以如果存在内存泄漏就会导致游戏越来越慢,因为可用内存资源越来越少

如果是在前端操作系统里出现了内存泄漏的情况,在进程结束掉之后就会主动释放空间,所以危害性不大

栈溢出

指的是给这个栈划分的内存区域爆了,比如写了一个死循环的递归

练习

有效的括号

数量和顺序都要匹配

#pragma once
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<stdbool.h>

typedef char 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);



void STInit(ST* pst) {
	assert(pst);

	pst->a = NULL;
	pst->capacity = 0;
	pst->top = 0;
}
void STDestroy(ST* pst) {
	assert(pst);

	free(pst->a);
	pst->a = NULL;
	pst->capacity = 0;
	pst->top = 0;
}
void STPush(ST* pst, STDataType x) {
	assert(pst);

	if (pst->top == pst->capacity) {
		int newcapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;
		STDataType* tmp = (STDataType*)realloc(pst->a, sizeof(STDataType) * newcapacity);
		if (tmp == NULL) {
			perror("relloc");
			return;
		}
		pst->a = tmp;
		pst->capacity = newcapacity;
	}
	pst->a[pst->top] = x;
	//在a[0]的时候放入第一个值
	pst->top++;
}
void STPop(ST* pst) {
	assert(pst);
	assert(pst->top > 0);//不为空

	pst->top--;
}

STDataType STTop(ST* pst) {
	assert(pst);
	assert(pst->top > 0);//不为空

	return pst->a[pst->top - 1];
}
bool STEmpty(ST* pst) {
	assert(pst);
	
	return pst->top == 0;
	//等于0返回真,不等于0返回假
}
int STSize(ST* pst) {
	assert(pst);

	return pst->top;
}

bool isValid(char* s) {
    ST st;
    STInit(&st);
    while(*s){
        if(*s == '{' || *s == '[' || *s == '('){
            //*s是左括号就入栈
            STPush(&st, *s);
        }
        else{
            //右比左多,会导致循环时栈为空,还要弹栈
            if(STEmpty(&st)){
                //防止内存泄漏
                STDestroy(&st);
                return false;
            }

            //*s是右括号就与栈顶匹配
            char top = STTop(&st);
            STPop(&st);

            //检查顺序匹配
            if((*s == '}' && top != '{')
            ||(*s == ']' && top != '[')
            ||(*s == ')' && top != '(')){
                STDestroy(&st);
                return false;
            }
        }
        ++s;
    }
    //检查数量匹配
    //左多右少
    bool ret = STEmpty(&st);
    //等于0就返回真,不等于0就返回假

    STDestroy(&st);
    return ret;
}

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

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

相关文章

货币单位换算 - 华为OD统一考试(E卷)

2024华为OD机试(E卷+D卷)最新题库【超值优惠】Java/Python/C++合集 题目描述 记账本上记录了若干条多国货币金额,需要转换成人民币分(fen),汇总后输出。 每行记录一条金额,金额带有货币单位,格式为数字+单位,可能是单独元,或者单独分,或者元与分的组合。 要求将这些…

解决QT开发由于中文导致的编译错误以及输出内容乱码问题

在进行QT程序开发时&#xff0c;大家可能或者一定会遇到的问题就是中文乱码问题&#xff0c;这个乱码问题可能是在你看代码的显示上&#xff0c;也可能在程序的输出上&#xff0c;甚至还有可能导致你的代码直接编译失败&#xff0c;都有可能和中文编码有关&#xff0c;还有一些…

力扣(leetcode)每日一题 2207 字符串中最多数目的子序列

题干 2207. 字符串中最多数目的子序列 给你一个下标从 0 开始的字符串 text 和另一个下标从 0 开始且长度为 2 的字符串 pattern &#xff0c;两者都只包含小写英文字母。 你可以在 text 中任意位置插入 一个 字符&#xff0c;这个插入的字符必须是 pattern[0] 或者 pattern…

提升论文质量必备!2024年顶尖8款AI写作工具!

各位好&#xff01;在这个信息化迅速发展的年代&#xff0c;AI技术已经成为我们学术探索的重要辅助力量。本次&#xff0c;我将向大家展示2024年八款必备的尖端AI应用。这些工具不仅能极大提升我们撰写学术论文的效率&#xff0c;还能改善研究的质量。 首先我们来看“梅子AI论…

Langgraph 的 Planning Agent 深度解析

在人工智能领域&#xff0c;智能代理&#xff08;agent&#xff09;的设计愈发重要。尤其在面对复杂任务时&#xff0c;规划&#xff08;planning&#xff09;技术成为智能代理的核心能力之一。Langgraph 是一个专为构建智能代理而设计的框架&#xff0c;结合了自然语言处理&am…

2024年项目经理不容错过的资源:全面测试管理工具指南与精选实例

随着软件开发的快速发展&#xff0c;测试管理工具在项目经理的日常工作中扮演着越来越重要的角色。2024年&#xff0c;哪些测试管理工具是项目经理不能错过的呢&#xff1f;本文将为您带来一份全面指南&#xff0c;帮助您找到最佳选择。 在软件开发过程中&#xff0c;测试是确保…

鸿蒙开发(NEXT/API 12)【硬件(接入手写套件)】手写功能开发

接入手写套件后&#xff0c;可以在应用中创建手写功能界面。界面包括手写画布和笔刷工具栏两部分&#xff0c;手写画布部分支持手写笔和手指的书写效果绘制&#xff0c;笔刷工具栏部分提供多种笔刷和编辑工具&#xff0c;并支持对手写功能进行设置。接入手写套件后将自动开启一…

机器学习方法实现水果分类(零基础小白向),手工提取水果图片特征,不一样的特征提取方法

文章目录 零、前言&#xff1a;一、什么是特征向量&#xff1f;二、数据准备三、构建数据集1、什么是数据集&#xff1f;2、图片对应的标签&#xff1f;3、特征提取方法&#xff08;1&#xff09;生成固定正方形&#xff08;2&#xff09;特征提取实现 四、建立模型五、自定义数…

【Python】遇见的问题:为项目选择的 Python 解释器无效

一、问题说明 导入项目文件后&#xff0c;提示“为项目选择的 Python 解释器无效” 二、问题原因 暂时不知道 三、解决办法 第一步&#xff1a;添加本地解释器 第二步&#xff1a;点击确定 位置&#xff1a;当前项目所在目录 基础解释器&#xff1a;python.exe所在目录 第三…

五子棋双人对战项目(2)——登录模块

目录 一、数据库模块 1、创建数据库 2、使用MyBatis连接并操作数据库 编写后端数据库代码 二、约定前后端交互接口 三、后端代码编写 文件路径如下&#xff1a; UserAPI&#xff1a; UserMapper&#xff1a; 四、前端代码 登录页面 login.html&#xff1a; 注册页面…

C++语法—引用

引用变量 概念 简单理解就是对一个已存在的变量起别名&#xff0c;与那个已存在的变量共用一块内存空间。 用法&#xff1a;已存在变量的类型 & 引用变量名 &#xff08;引用实体&#xff09;已存在变量 int main() {int a 1;int& b a;return 0; }在上面这个示例…

minio 快速入门+单机部署+集群

目录 原理 概念 名词解释 Set /Drive 的关系 MinIO部署 单机 单机单盘 单机多盘 集群 多机单盘 多机多盘 配置负载均衡 调优 原理 MinIO是一个S3兼容的高性能对象存储&#xff0c;其主要特点如下&#xff1a; 适合存储大容量非结构化的数据&#xff0c;如图片&…

骨传导耳机品牌排行榜分享:360度实测分析10款抢手骨传导耳机!

随着科技的不断进步和人们生活方式的变化&#xff0c;骨传导耳机以其独特的传声方式和开放式设计&#xff0c;逐渐成为运动爱好者、户外活动家以及听力障碍人士的新宠。不同于传统耳机将声音直接导入耳道&#xff0c;骨传导耳机通过振动颅骨将声音传递至内耳&#xff0c;不仅能…

数据结构与算法——Java实现 20.习题——二叉树层序遍历

认真的人改变自己&#xff0c;执着的人改变命运 —— 24.9.27 102. 二叉树的层序遍历 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例 2&#xff1a; 输入&#xff1a;root [1] 输出&#xff1a;[[1]]示例 3&…

Java单体服务和集群分布式SpringCloud微服务的理解

单体应用存在的问题 1.随着业务的发展开发变得越来越复杂。 2.修改或者新增&#xff0c;需要对整个系统进行测试、重新部署。 3.一个模块出现问题&#xff0c;很可能导致整个系统崩溃。 4.多个开发团队同时对数据进行管理&#xff0c;容易产生安全漏洞。 5.各个模块使用同…

Spring Session学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程&#xff1a;封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…

如何在算家云搭建MVSEP-MDX23(音频分离)

一、MVSEP-MDX23简介 模型GitHub网址&#xff1a;MVSEP-MDX23-music-separation-model/README.md 在 main ZFTurbo/MVSEP-MDX23-音乐分离模型 GitHub 上 在音视频领域&#xff0c;把已经发布的混音歌曲或者音频文件逆向分离一直是世界性的课题。音波混合的物理特性导致在没有…

快消品海外仓应该如何选择合适WMS仓储系统?

快消品的“快”属性天然契合海外仓&#xff0c;快消品大部分是必需品&#xff0c;库存周转快&#xff0c;需保持一定量的安全库存&#xff0c;及时、稳定补货尤为重要&#xff1b;快消品最适合全渠道销售&#xff0c;线上线下等&#xff0c;比较考验备货和统筹能力&#xff1b;…

基于RustDesk自建远程桌面服务

最近向日葵越来越难用了&#xff0c;官方好像限制了免费用户的带宽&#xff0c;但是限制的有点过头了&#xff0c;卡的基本没法用。 向日葵的平替todesk对于免费用户又有时长限制&#xff0c;对于经常用的小伙伴不大友好。 咱也不是说非得白嫖&#xff0c;但是向日葵和todesk这…

观测云链路追踪分析最佳实践

背景 如果要在开发、运维和工程层面持续改进一个涉及多服务的应用&#xff0c;以链路追踪、日志检索、指标收集、用户体验监测、性能剖析、关联分析等作为代表性技术的可观测性必不可少&#xff0c;这一看法已成为共识&#xff0c;但在采用这项技术的过程中&#xff0c;如何分…