用栈实现字符平衡

今天学了数据结构的栈,里面讲了一个用栈实现字符平衡。用JS实现了下

//step1 => declare a stack and a str for test and a flag for final check
var stack=[],
    str="(123)iasd[123]]",
    flag=true;
//step2 => for loop and push the left-part into stack;
strlen=str.length;
for(var i=0;i<strlen;i++){
    if(str[i]==‘(‘ || str[i]==‘[‘){
        stack.push(str[i]);
    }
    //step3 => test if the character is suited to the top of stack;
    var stacklen=stack.length;
    //step4 => suited and pop the top of stack;

   //step5 => not suited and change the flag
    if(str[i]==‘)‘ && stack[stacklen-1]!=‘(‘){
        flag=false;
    }
    if(str[i]==‘]‘ && stack[stacklen-1]!=‘[‘){
        flag=false;
    }

    if(str[i]==‘)‘ && stack[stacklen-1]==‘(‘){
        stack.pop();
    }
    if(str[i]==‘]‘ && stack[stacklen-1]==‘[‘){
        stack.pop();
    }
}
// step6 => after the loop,if the stack have elements,change the flag to false;

if(stack.length){
    flag=false;
}
//step7 => check out flag;
alert(flag);

代码很粗糙,没分装,另外只做到了对()[]的判断。

时间: 2024-10-03 14:45:26

用栈实现字符平衡的相关文章

用栈判断字符串匹配问题

实例主要实现:输入一个括号字符串,依次检验,若为左括号则入栈,若为右括号则出栈一个字符判断是否与之相对应,在最后还需判断栈是否为空,如果不为空则不匹配. 首先回顾栈的基本知识: 1.定义栈的结构体并初始化一个新栈: struct stack { char strstack[stacksize]; int top; }; void InitStack(stack &s) { s.top=-1; } 2.出栈和入栈操作: char Push(stack &s,char a) { if(s.to

内存的堆分配和栈分配 &amp; 字符数组,字符指针,Sizeof总结

堆和栈的区别 一个由C/C++编译的程序占用的内存分为以下几个部分1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.2.堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵.3.全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻

栈应用之平衡符号

栈的应用:检查每件事情是否能成对出现,算法叙述: 做一个空栈.读入字符直到文件结尾.如果字符是一个开放符号,则将其推入栈中.如果字符是一个封闭符号,则当栈为空时报错.否则,将栈元素弹出.如果弹出的符号不是对应的开放符号,则报错.在文件结尾,如果栈非空则报错. public class BalanceSigned { @SuppressWarnings("unchecked") public static void checkChar(char[] words,int size){ bo

栈的应用--栈用作判断平衡符号,[()]对的,[(])错的

#include<stdio.h> #include<stdlib.h> struct Node; typedef struct Node *PtrToNode; typedef PtrToNode Stack; struct Node{ char Ele; PtrToNode Next; }; Stack CreateStack( void ) { Stack S; S = malloc( sizeof( struct Node ) ); if(S == NULL ) print

数据结构-栈的实现之运算式求值

运算时求值核心思想:将运算式逐字符读取,若是运算数就进运算数栈,若是运算符就与运算符栈顶比较运算符的优先级来做相应的操作.直到遇到运算式的结束符且运算符栈里没有运算符为止. 因为用到了两个栈(运算符栈和运算数栈)且这两个栈的基本存储类型还不一样,一个为char类型存储运算符,而另一个为float类型存储数值的.所以就调用了两个栈的头文件Stack_Float.h和Stack_Char.h.两个头文件实现的基本操作是一样的,只是里面的结构体类型进行了改动.如下: 1 /*Stack_Char.h*

[解题报告]加密 栈

[Description]有一个仅含小写字母的字符串,我们把它按如下方法加密:STEP1:把所有连续的相同字母都用一个字母代替.比如 aaabbbb 被替换为 ab.STEP2:在随机的位置插入两个相同的小写字母.重复 STEP2 很多次.下面是一个加密的实例初始字符串 ssstieerrrliiittzSTEP1 之后 stierlitz插入 dd stddierlitz插入 aa stdaadierlitz插入 ww wwstdaadierlitz现在我们给定加密后的字符串,求执行 STEP

简单数据结构(四)栈和队列的简单应用

     编程判断一个字符串是否是回文.回文是指一个字符序列以中间字符为基准两边字符完全相同,如字符序列" ACBDEDBCA"是回文.      算法思想:判断一个字符序列是否是回文,就是把第一个字符与最后一个字符相比较,第二个字符与倒数第二个字符比较,依次类推,第 i 个字符与第 n-i个字符比较.如果每次比较都相等,则为回文,如果某次比较不相等,就不是回文.因此,可以把字符序列分别入队列和栈,然后逐个出队列和出栈并比较出队列的字符和出栈的字符是否相等,若全部相等则该字符序列就是回

数据结构一:栈

[例子1]132 Pattern https://leetcode.com/problems/132-pattern/description/ Given a sequence of n integers a1, a2, ..., an, a 132 pattern is a subsequence ai, aj, ak such that i < j < k and ai < ak < aj. Design an algorithm that takes a list of n

判断一个字符串是否为回文-链队(新建,进队,出队),链栈(新建,进栈,出栈)

回文:字符对称排列的字符串,例如ABCBA 思路:根据队:先进先出和栈: 先进后出的原则,进行比较出队和出栈的字符是否相等.如果相等,则为回文. 创建控制台应用程序. 1 #region 字符节点类 2 class CharNode 3 { 4 public char Char //字符 5 { 6 get; 7 set; 8 } 9 public CharNode Next //下一节点 10 { 11 get; 12 set; 13 } 14 public CharNode(char Cha