当前位置: 首页 > news >正文

写作网站最大网页视频下载软件免费版

写作网站最大,网页视频下载软件免费版,前端开发工作岗位,自己做网站的劣势文章目录 一、物理结构和逻辑结构二、栈1、什么是栈2、栈中一些基本操作的实现Stack.hStack.c栈的初始化栈的销毁入栈出栈获得栈顶元素获得栈的元素数判断栈空 三、利用栈解决问题 一、物理结构和逻辑结构 栈和队列都属于逻辑结构,它们既可以用数组实现也可以用链表…

文章目录

  • 一、物理结构和逻辑结构
  • 二、栈
    • 1、什么是栈
    • 2、栈中一些基本操作的实现
      • Stack.h
      • Stack.c
        • 栈的初始化
        • 栈的销毁
        • 入栈
        • 出栈
        • 获得栈顶元素
        • 获得栈的元素数
        • 判断栈空
  • 三、利用栈解决问题

在这里插入图片描述

一、物理结构和逻辑结构

在这里插入图片描述

栈和队列都属于逻辑结构,它们既可以用数组实现也可以用链表实现。

二、栈

1、什么是栈

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

在这里插入图片描述

2、栈中一些基本操作的实现

利用数组来实现栈的基本操作

在这里插入图片描述

代码结构设计:

  • Stack.h: 存放链表结构及需要用到的头文件,函数声明等
  • Stack.c: 各种操作函数的具体实现

Stack.h

#pragma once#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include<stdbool.h>
//方便修改类型
typedef int STDataType;
//栈
typedef struct Stack
{STDataType* a;//实现栈的数组int top;//栈顶int capacity;//栈容量
}ST;//栈的初始化
void STInit(ST* ps);
//栈的销毁
void STDestroy(ST* ps);
//入栈
void STPush(ST* ps, STDataType x);
//出栈
void STPop(ST* ps);
//获得栈顶元素
STDataType STTop(ST* ps);
//获得栈的元素数
int STSize(ST* ps);
//判断栈空
bool STEmpty(ST* ps);

Stack.c

#include "Stack.h"

栈的初始化

void STInit(ST* ps)
{assert(ps);ps->a = NULL;//栈顶元素的下一个ps->top = 0;ps->capacity = 0;
}

栈的销毁

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

入栈

void STPush(ST* ps, STDataType x)
{assert(ps);//空间不足,扩容if (ps->capacity == ps->top){int newCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType)*newCapacity);if (tmp == NULL){perror("realloc fail");exit(-1);}ps->a = tmp;ps->capacity = newCapacity;}//更新入栈后内容ps->a[ps->top] = x;ps->top++;
}

在这里插入图片描述

出栈

void STPop(ST* ps)
{assert(ps);assert(ps->top > 0);ps->top--;
}

在这里插入图片描述

获得栈顶元素

top初始化时是0,是栈顶元素的下一个位置,所以栈顶元素下标是top-1

STDataType STTop(ST* ps)
{assert(ps);assert(ps->top > 0);return ps->a[ps->top - 1];
}

获得栈的元素数

top从0开始,栈内多一个元素它就加1,所以top与元素树大小一致

int STSize(ST* ps)
{assert(ps);return ps->top;
}

判断栈空

top等于0时栈空

bool STEmpty(ST* ps)
{return ps->top ==0 ;
}

三、利用栈解决问题

本题来自LeetCode:有效的括号

有效的括号

在这里插入图片描述

示例1:

输入:s=“( )”
输出:true

示例2:

输入:s=“( )[ ]{ }”
输出:true

示例3:

输入:s=“( ]”
输出:false

  • 1 <= s.length <= 104
  • s 仅由括号 ‘( )[ ]{ }’ 组成

题目分析:

  1. 对于这个题我们需要将字符串内括号的左一半与右一半进行匹配,有"( { [ ] })“、”( ) [ ] { }“等多种情况都是符合情况的,也有像”( { ) }"这种不符合情况的都需要考虑。
  2. 如果是左括号则入栈
  3. 如果是右括号,取出栈顶元素与之匹配
  4. 如果右边括号匹配时栈内已经空了则数量不匹配
  5. 匹配结束后栈内不为空则数量不匹配

代码:

这里我们用上面实现的栈操作来完成

bool isValid(char * s){ST st;STInit(&st);char topval;while(*s){if(*s=='('||*s=='{'||*s=='['){STPush(&st,*s);}else{//如果栈内为空说明数量不匹配if(STEmpty(&st)){STDestroy(&st);return false;}//取出栈顶元素,然后栈顶元素出栈topval=STTop(&st);STPop(&st);//匹配不成功的情况if((*s==')'&&topval!='(')|| (*s=='}'&&topval!='{')|| (*s==']'&&topval!='[')){STDestroy(&st);return false;}}s++;}//匹配完后如果栈内不为空说明数量不匹配bool ret=STEmpty(&st);STDestroy(&st);return ret;
}
http://www.yayakq.cn/news/899226/

相关文章:

  • 沈阳网站制作的公司广州各区风险区域最新动态
  • 帮朋友做网站程序界面设计
  • 织梦网站tag自定义插件社交电商平台种类
  • 设计的好看的网站wordpress发布文章禁用谷歌字体
  • 电商网站优化方案营销型网站分析
  • 有哪些做平面设计好的网站有哪些如何做一个电商
  • 枸杞网站的建设方案公司宣传片如何制作
  • 营销型网站应用本地网站开发
  • 保定专业做网站的公司阿里企业邮箱个人登录
  • 电子商城网站怎么做张家港做淘宝网站
  • 网站后台域名网站开发部署到国外
  • 网站如何做微信推广方案西山网站建设
  • 免费网站管理系统下载google搜索引擎
  • 新泰营销型网站建设濮阳做公司网站
  • 手机网站模板带后台广西南宁做网站的公司
  • 制作网页时关于可以采用的图像文件格式正确的描述是网站大图片优化
  • 钓鱼网站链接安丘做网站
  • 网站工商网监标郑州的设计公司
  • 西安专业网站建设服务想自己做网站 有免费的吗
  • 石家庄网站怎么建设合作做网站的总结和心得
  • php网站开发开发网站教程海宁做网站
  • 做网站前期预算欧米茄手表价格及图片官方网站
  • 在线做网站索引网站做好了前端 后端怎么做
  • 邯郸专业做网站全球互联网中心在哪里
  • 2核4g做网站注册城乡规划师备考
  • 网站无障碍建设规定国家域名注册有什么用
  • 在线html5制作网站个人网页设计源代码
  • 专注高密网站建设伊利集团网站建设实训
  • 咨询行业网站制作汕头站扩建
  • 乐陵网站服务在哪一条wordpress教学视频