栈的实现.
创始人
2024-02-06 04:18:14
0

文章目录

  • 1.栈的概念及结构
  • 2.栈的实现(数组实现)
    • 2.1栈头文件
    • 2.2函数实现
  • 3.栈的习题
    • 3.1有效的括号
      • 3.1.1思路分析
      • 3.1.2代码实现


1.栈的概念及结构

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

2.栈的实现(数组实现)

2.1栈头文件

#pragma once
#include
#include
#include
#include
#include
typedef int STDatatype;
typedef struct stack
{STDatatype* a;int top;int capacity;
}ST;
void StackInit(ST* ps);
void StackDestroy(ST* ps);
void StackPush(ST* ps, STDatatype x);
void StackPop(ST* ps);
STDatatype StackTop(ST* ps);
bool StackEmpty(ST* ps);
int StackSize(ST* ps);

2.2函数实现


#include"stack.h"
void StackInit(ST* ps)
{assert(ps);ps->a = (STDatatype*)malloc(sizeof(STDatatype) * 4);if (ps->a == NULL){perror("malloc fail");exit(-1);}ps->top = 0;//top的值是值得推敲的,如果为0那么top指向的就是栈顶元素的下一个,并且top的值还是元素数量,如果top的值为-1,那么top的指向的就收栈顶元素ps->capacity = 4;}
void StackDestroy(ST* ps)
{assert(ps);free(ps->a);ps->top = 0;ps->capacity = 0;
}
void StackPush(ST* ps, STDatatype x)
{assert(ps);if (ps->top == ps->capacity){STDatatype* tmp = (STDatatype*)realloc(ps->a, ps->capacity * 2 * sizeof(STDatatype));if (tmp == NULL){perror("malloc");exit(-1);}ps->capacity *= 2;ps->a = tmp;}ps->a[ps->top] = x;ps->top++;}
void StackPop(ST* ps)
{assert(ps);/*assert(ps->top > 0);*/assert(!StackEmpty(ps));ps->top--;}
STDatatype StackTop(ST* ps)
{assert(ps);//assert(ps->top > 0);assert(!StackEmpty(ps));return ps->a[ps->top-1];
}
bool StackEmpty(ST* ps)
{assert(ps);return(ps->top == 0);
}
int StackSize(ST* ps)
{assert(ps);return ps->top;
}

3.栈的习题

3.1有效的括号

在这里插入图片描述

3.1.1思路分析

首先拿到这道题我们可能会进入一个误区
我们可能会想到strlen来求字符长度奇偶性来判断是否合法,这显然想得不够全面"{{{{{{"显然这种就不好用。
这道题简单来看合不合法就是依次消掉括号,看最后能否都消除
在这里插入图片描述

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

3.1.2代码实现


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

上一篇:广东的介绍

下一篇:第四章 决策树

相关内容

热门资讯

​个体工商户季度申报增值税有哪... 个体工商户季度申报增值税有哪些注意事项个体户季度报税的注意事项主要包括以下几点:一、确保准确申报纳税...
男士黑色休闲衬衣搭配,高叶黑色...   梧桐是中国传统文人的爱情之树。爱情是长江的水,梧桐盛开,百鸟争鸣,只有凤凰会来活。因为传说中的凤...
先帝创业未半而中道投曹什么梗,...         1.始皇帝没有创业,而是花光了所有的预算。      2.出门不捡钱,已经亏了钱。 ...
西双版纳温德姆酒店,温德姆酒店...   休息一夜后,第二天的景点是玉龙雪山。雨下得很大,导游说如果雨不停,可能就没法爬山了。一行人忐忑不...
小型创业项目招商加盟,小型家庭...   切碎机是肉制品、果蔬制品、鱼制品、海产品、豆制品和杂粮制品生产过程中的关键设备。高速旋转剁刀可以...
适合大学生创业的项目有哪些,大...   创业,绽放人生,努力实现梦想。12月21日,第二届日照市大学生创业大赛在日照市科技创新中心成功举...
大学生汽修创业计划书模板,修车...   如今,随着人们生活水平的不断提高,越来越多的人成为了车主。最新数据显示,我国汽车保有量已超过3....
摆地摊属于什么职业,摆地摊算不...   每个人都有一颗创业的心,但有些人因为各种原因无法创业,但还是有一些人想创业。每个人都想成功创业,...
南昌创业,南昌创业孵化基地 南...   目前,南昌坚持把高素质人才作为不可替代的第一资源和核心要素,为广大人才自主创业提供了优良的沃土。...
开会发言跑题了怎么办,创业公司...   始终将自己的角色定义为工作中的组织者、沟通者和协调者。过去,作为主管,我帮助跟进项目,与不同部门...