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

那里可以找建网站的人seo推广百度百科

那里可以找建网站的人,seo推广百度百科,同步wordpress文章,有关学校网站建设策划书目录 栈的概念及结构 栈的实现 创建栈 栈的初始化 入栈 出栈 取出栈顶数据 判断栈是否为空 有效数据个数 栈的销毁 全代码 stack.h stack.c 应用 题目 示例 解题思路 代码实现 栈的概念及结构 栈是一种特殊的线性表,其只允许在固定的一端进行插入…

目录

栈的概念及结构

栈的实现

创建栈

栈的初始化

入栈

出栈

取出栈顶数据

判断栈是否为空

有效数据个数

栈的销毁

全代码

stack.h

stack.c

应用

题目

示例

解题思路

代码实现


栈的概念及结构

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

ab6ac3c165d14946b995f1be45a61c3a.png

     栈顶和栈底并不是固定的,这是人为决定的。

栈的实现

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

     以下的内容如果你对顺序表的实现熟悉的话就很简单。

创建栈

     栈的创建需要有指向动态数组指针,栈顶数据下标和容量

typedef int STDataType;typedef struct Stack
{STDataType* arr;//指向动态数组指针int top;//栈顶数据下标int capacity;//容量
}ST;

栈的初始化

     将arr置为空指针,top置为-1,capacity置为0。

//初始化
void STInit(ST* pst)
{assert(pst);pst->arr = NULL;pst->top = -1;pst->capacity = 0;
}

     这里的top为什么要是-1呢?

     一般来说top应该也是0,这里是-1是为了确保top是栈顶数据的下标。当然了你要是想写0也是可以的。

入栈

     入栈又称压栈,进栈。

     首先要判断容量是否够用,如果不够用的话就扩容。然后再把数据塞入即可。

3e2a82dbe4434d56a58a320d45041910.png

//入栈
void STPush(ST* pst, STDataType x)
{assert(pst);if (pst->top + 1 == pst->capacity){pst->capacity = pst->capacity == 0 ? 4 : pst->capacity * 2;STDataType* p = (STDataType*)realloc(pst->arr, sizeof(STDataType) * pst->capacity);if (p == NULL){perror("realloc");return;}pst->arr = p;}pst->arr[++pst->top] = x;
}

     注意:这里要前置++,如果后置就会造成非法访问。如果top是0,就要后置了。

出栈

     这里要另外判断一下栈是否为空。然后只要让top--即可。

3cb3ad12e9474a6a9c91a97b0418ffa2.png

//出栈
void STPop(ST* pst)
{assert(pst);assert(pst->top > -1);pst->top--;
}

取出栈顶数据

     这里也要判断一下栈是否为空。然后返回下标top对应的数据即可。

//取出出栈顶数据
STDataType STTop(ST* pst)
{assert(pst);assert(pst->top > -1);return pst->arr[pst->top];
}

判断栈是否为空

     直接返回pst->top==-1即可。

//判断栈是否为空
bool STEmpty(ST* pst)
{assert(pst);return pst->top == -1;
}

     该函数类型要是布尔类型。

     如果top=-1则返回true,否则返回false。

有效数据个数

     直接返回top+1即可。

//有效数据个数
int STSize(ST* pst)
{assert(pst);return pst->top + 1;
}

栈的销毁

     用free销毁arr,并将它置为空指针。其它的置为初始化值即可。

//销毁
void STDestroy(ST* pst)
{assert(pst);free(pst->arr);pst->arr = NULL;pst->top = -1;pst->capacity = 0;
}

全代码

stack.h

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>typedef int STDataType;typedef struct Stack
{STDataType* arr;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);

stack.c

#include "stack.h"//初始化
void STInit(ST* pst)
{assert(pst);pst->arr = NULL;pst->top = -1;pst->capacity = 0;
}//入栈
void STPush(ST* pst, STDataType x)
{assert(pst);if (pst->top + 1 == pst->capacity){pst->capacity = pst->capacity == 0 ? 4 : pst->capacity * 2;STDataType* p = (STDataType*)realloc(pst->arr, sizeof(STDataType) * pst->capacity);if (p == NULL){perror("realloc");return;}pst->arr = p;}pst->arr[++pst->top] = x;
}//出栈
void STPop(ST* pst)
{assert(pst);assert(pst->top > -1);pst->top--;
}//取出栈顶数据
STDataType STTop(ST* pst)
{assert(pst);assert(pst->top > -1);return pst->arr[pst->top];
}//判断栈是否为空
bool STEmpty(ST* pst)
{assert(pst);return pst->top == -1;
}//有效数据个数
int STSize(ST* pst)
{assert(pst);return pst->top + 1;
}//销毁
void STDestroy(ST* pst)
{assert(pst);free(pst->arr);pst->arr = NULL;pst->top = -1;pst->capacity = 0;
}

应用

题目

a4f138d238f749da886b89dd701e8202.png

该题链接: https://leetcode.cn/problems/valid-parentheses/description/

示例

3b9577022e254ae7a80ec7676e3d5bfb.png

解题思路

     这题根据栈的后进先出边入边出的特性可以解决。

     创建一个栈,只让左括号入栈,让右括号与栈里的数据匹配。如果匹配成功让左括号出栈,继续该操作直至字符串遍历完。如果匹配不成功则直接退出。

有几个要注意的点

  1. 字符串只有右括号
  2. 字符串只有左括号或只剩左或右括号
  3. arr是int的类型,要把它改成char类型

代码实现

bool isValid(char* s) 
{ST st;STInit(&st);while(*s){if(*s == '(' || *s == '[' || *s == '{'){STPush(&st, *s);}else{if(st.top == -1)//字符串只有右括号{STDestroy(&st);return false;}STDataType top = STTop(&st);if(*s == ')' && top != '(' || *s == ']' && top != '[' || *s == '}' && top != '{'){STDestroy(&st);return false;}STPop(&st);}s++;}bool ret = STEmpty(&st);//字符串只有左括号或只剩左或右括号STDestroy(&st);return ret;
}

http://www.hkea.cn/news/94503/

相关文章:

  • 张家港网站建设福州百度快速优化
  • 兼职做网站编辑百度搜索推广开户
  • 谁告诉你j2ee是做网站的宁波网站推广找哪家公司
  • 谷歌外贸建站多少钱搭建网站教程
  • 赚钱靠普的网站关键字搜索软件
  • 建设银行深分行圳招聘网站做游戏推广一个月能拿多少钱
  • 北京网站建设及推广招聘关键词排名代做
  • 对网站建设的意见建议网络营销推广的方法有哪些
  • 爬虫网站怎么做怎样才能在百度上面做广告宣传
  • 网站页码南昌做seo的公司有哪些
  • 网络设计方案包括哪些深圳百度推广seo公司
  • 亚马逊跨境电商开店站长工具seo综合查询5g
  • 网站怎么做百度快照logo百度快照优化推广
  • 山西网站建设排名seo技术培训山东
  • 日韩系成人影片成首选网站如何优化推广
  • 网站到期续费通知搜索风云排行榜
  • 网站公司说我们做的网站服务器不够用哪个杭州seo好
  • 类似淘宝网站建设费用杭州哪家seo公司好
  • 装修网站怎样做seo专员很难吗
  • 无锡网站外包如何接广告赚钱
  • 英文网站制作 官网淘宝标题优化网站
  • 电力建设网站网络推广网站的方法
  • 如何做网站窗口网站优化网络推广seo
  • 营销型网站建设效果网络营销策划推广方案
  • 专业的网站搭建多少钱网站seo优化价格
  • 广州公司网站设计制作win10优化大师官网
  • 做调查哪个网站比较可靠百度指数查询
  • 怎么在建设厅网站报名广州网站优化服务
  • 怎么用dw做静态网站b站好看的纪录片免费
  • 济南网站建设那家好网站制作公司有哪些