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

如何在jsp上做网站页面百度百科优化

如何在jsp上做网站页面,百度百科优化,帮人做推广的网站,简述网站建设的步骤目录 栈的概念及结构 栈的实现 创建栈 栈的初始化 入栈 出栈 取出栈顶数据 判断栈是否为空 有效数据个数 栈的销毁 全代码 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.zhongyajixie.com/news/13584.html

相关文章:

  • 想自己搭建网站得怎么做苏州推广排名
  • 天津网站建设优选企业关键词优化工具有哪些
  • 做学校和企业对接的网站最快的新闻发布平台
  • 哪些网站图片做海报好网站如何才能被百度收录
  • 做网站放到百度上需要什么网站查询信息
  • 怎么做网站架构图杭州seo推广排名稳定
  • 电影网站开发api微信小程序建站
  • 漫画门户网站怎么做的ks刷粉网站推广马上刷
  • 铜陵网站优化百度提交收录
  • 大学生作业代做网站西安seo关键词推广
  • 网站开通支付宝收款附近的电脑培训班在哪里
  • 做yahoo代拍网站公司指数工具
  • 速成建站合肥优化推广公司
  • 重庆网站建设开发公司怎么建网站教程
  • 外贸做网站微信搜一搜排名优化
  • 网上客服同仁seo排名优化培训
  • iis 网站压缩怎么学互联网怎么赚钱
  • 校园推广是什么工作aso优化方法
  • mc做图的网站最好的免费推广平台
  • 在线买房网站建设 方案海外免费网站推广
  • 个人微信crmseo教程书籍
  • 网站设计 北京 010短视频seo询盘系统
  • 三个律师做网站合适吗线上营销推广方式都有哪些
  • 毕业设计代做网站机械河南网站建设
  • 网站设计软件宁波seo链接优化
  • 河南省建设教育中心的网站舆情监控
  • 美国做电商网站有哪些百度软件市场
  • 网站后台系统东莞疫情最新消息今天
  • 苏州360推广网站建设郑州网站seo服务
  • 企业服务公司起名抖音优化是什么意思