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

高县住房和城乡建设部网站泡棉制品东莞网站建设

高县住房和城乡建设部网站,泡棉制品东莞网站建设,网站提交入口,joomla 网站模板栈和队列必备的面试题(第一期) 文章目录栈和队列必备的面试题(第一期)一、题目二、思路(图解)三、存在的问题与隐患(报错提示)(1)s中只有右括号,无…

栈和队列必备的面试题(第一期)


文章目录

  • 栈和队列必备的面试题(第一期)
  • 一、题目
  • 二、思路(图解)
  • 三、存在的问题与隐患(报错提示)
    • (1)s中只有右括号,无左括号
    • (2)返回值处理
    • (3)销毁栈
  • 四、整体源代码
  • 总结


一、题目

在这里插入图片描述


Leedcode链接:https://leetcode.cn/problems/valid-parentheses/


在这里插入图片描述


二、思路(图解)

我们用 来实现这道题,具体如下图!


在这里插入图片描述

这里我们用到 栈 接口实现中的 Stackpush 接口!然后 s++


在这里插入图片描述

这里我们会用到 栈 接口实现中的 StacktopStackpop 接口!下面是 比较方法!


正确的就 s++,知道*s为NULL为止!
在这里插入图片描述


如果不匹配,直接返回 false!
在这里插入图片描述

出栈 + 入栈 + 取栈顶数据 + 比较方法 : 代码如下(示例):

typedef int STDataType;
typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;
void StackInit(ST* ps)
{assert(ps);ps->a = NULL;ps->top = ps->capacity = 0;
}
void StackDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = ps->top = 0;
}
void StackPush(ST* ps, STDataType x)
{assert(ps);if (ps->top == ps->capacity){int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;STDataType* tmp = (STDataType*)realloc(ps->a, newCapacity * sizeof(STDataType));if (tmp == NULL){perror("realloc fail");exit(-1);}ps->a = tmp;ps->capacity = newCapacity;}ps->a[ps->top] = x;ps->top++;
}
void StackPop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));--ps->top;
}
STDataType StackTop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));return ps->a[ps->top - 1];
}
int StackEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}
bool isValid(char * s)
{ST st;StackInit(&st);while(*s){if(*s == '('|| *s == '['|| *s == '{'){StackPush(&st , *s);s++;}else{STDataType top = StackTop(&st);StackPop(&st);if(*s == ')' && top != '('|| *s == ']' && top != '['|| *s == '}' && top != '{'){StackDestroy(&st);return false;}else{s++;}}}
}

三、存在的问题与隐患(报错提示)

如果现在提交代码,会出现以下的报错 + 问题


(1)s中只有右括号,无左括号

在这里插入图片描述

这里我们应该注意:如果没有左括号直接返回 false 即可!
在这里插入图片描述

代码如下(示例):

while(*s){if(*s == '('|| *s == '['|| *s == '{'){StackPush(&st , *s);s++;}else{//如果没有左括号,栈为空,返回falseif(StackEmpty(&st)){StackDestroy(&st);return false;}STDataType top = StackTop(&st);StackPop(&st);if(*s == ')' && top != '('|| *s == ']' && top != '['|| *s == '}' && top != '{'){StackDestroy(&st);return false;}else{s++;}}}

(2)返回值处理

在这里插入图片描述

如果 栈 不是空,则说明栈中还有左括号未出。即没有匹配,返回是 false

代码如下(示例):

bool ret = StackEmpty(&st);StackDestroy(&st);return ret;

(3)销毁栈

最后不要忘了用 栈 的 StackDestroy 对栈进行销毁否则会导致 内存泄漏等问题

StackDestroy(&st);

四、整体源代码

代码如下(示例):

typedef int STDataType;
typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;
void StackInit(ST* ps)
{assert(ps);ps->a = NULL;ps->top = ps->capacity = 0;
}
void StackDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = ps->top = 0;
}
void StackPush(ST* ps, STDataType x)
{assert(ps);if (ps->top == ps->capacity){int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;STDataType* tmp = (STDataType*)realloc(ps->a, newCapacity * sizeof(STDataType));if (tmp == NULL){perror("realloc fail");exit(-1);}ps->a = tmp;ps->capacity = newCapacity;}ps->a[ps->top] = x;ps->top++;
}
void StackPop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));--ps->top;
}
STDataType StackTop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));return ps->a[ps->top - 1];
}
int StackEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}
bool isValid(char * s)
{ST st;StackInit(&st);while(*s){if(*s == '('|| *s == '['|| *s == '{'){StackPush(&st , *s);s++;}else{//如果没有左括号,栈为空,返回falseif(StackEmpty(&st)){StackDestroy(&st);return false;}STDataType top = StackTop(&st);StackPop(&st);if(*s == ')' && top != '('|| *s == ']' && top != '['|| *s == '}' && top != '{'){StackDestroy(&st);return false;}else{s++;}}}bool ret = StackEmpty(&st);StackDestroy(&st);return ret;}

在这里插入图片描述


总结

以上就是今天要讲的内容,本文介绍了【Leedcode】中栈和队列必备的面试题(第一期)
如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!
在这里插入图片描述

http://www.yayakq.cn/news/901732/

相关文章:

  • 企业网站用什么域名企业网络营销推广方案
  • 手机网站开发价格网站域名购买
  • 怎么做网站接家纺订单惠州市
  • 做公司网站应准备什么材料模板王字体网
  • 网站建设 麓谷wordpress cros
  • 一键生成logo免费在线网页清远市企业网站seo联系方式
  • 牙科医院网站推广方案wordpress国产定制主题
  • 网站怎么做谷歌权重怎么做存储网站
  • 网站建设后期修改网站支付端口
  • 建站快车代理平台系统中国产品网注册
  • 社区门户网站规范化建设珠海制作企业宣传片
  • muse做的网站怎么样wordpress wp_cumulus_insert(
  • 电子商务网站建设与维护实训报告青岛市住房和城乡建设局官方网站
  • 网站二级栏目石家庄网络公司哪家正规
  • 建企业网站需要多少钱珠江网站建设
  • 苏宁易购网站建设的不足之处湖南郴州市有几个县
  • 整屏幕滑动的网站wordpress如何安装网站主题
  • 网站一般在哪建设如何做全景素材网站
  • 网站新闻列表页面代码阜新旅游网站建设
  • 驻马店营销型网站建设优化推广网站建设与规划实验心得
  • 网站开发是哪个职位蓝海网站建设
  • 网站怎么加留言青岛网站建设找
  • 广州旅游网站建设设计永久免费网站申请注册
  • 档案网站建设图片网站环境搭建
  • 深圳二次源网站建设麻章手机网站建设公司
  • 建设部网站 标准定额司青岛网站优化
  • 桐乡市住房建设局网站公示中英繁网站源码
  • 常用网站布局客户管理软件crm
  • wordpress怎样建立多站点包头市做网站
  • 服务器搭建网站域名配置速贝cms建站系统