2015-09-16 14:23:44 B08370108 阅读数 392
  • JavaWeb实战开发

    本课程详细讲解了以下内容:     1.jsp环境搭建及入门、虚拟路径和虚拟主机、JSP执行流程     2.使用Eclipse快速开发JSP、编码问题、JSP页面元素以及request对象、使用request对象实现注册示例     3.请求方式的编码问题、response、请求转发和重定向、cookie、session执行机制、session共享问题      4.session与cookie问题及application、cookie补充说明及四种范围对象作用域      5.JDBC原理及使用Statement访问数据库、使用JDBC切换数据库以及PreparedStatement的使用、Statement与PreparedStatement的区别      6.JDBC调用存储过程和存储函数、JDBC处理大文本CLOB及二进制BLOB类型数据      7.JSP访问数据库、JavaBean(封装数据和封装业务逻辑)      8.MVC模式与Servlet执行流程、Servlet25与Servlet30的使用、ServletAPI详解与源码分析      9.MVC案例、三层架构详解、乱码问题以及三层代码流程解析、完善Service和Dao、完善View、优化用户体验、优化三层(加入接口和DBUtil)     1 0.Web调试及bug修复、分页SQL(Oracle、MySQL、SQLSERVER)      11.分页业务逻辑层和数据访问层Service、Dao、分页表示层Jsp、Servlet      12.文件上传及注意问题、控制文件上传类型和大小、下载、各浏览器下载乱码问题      13.EL表达式语法、点操作符和中括号操作符、EL运算、隐式对象、JSTL基础及set、out、remove      14.过滤器、过滤器通配符、过滤器链、监听器      15.session绑定解绑、钝化活化      16.以及Ajax的各种应用      17. Idea环境下的Java Web开发

    3693 人正在学习 去看看 颜群

栈的一个简单应用,括号匹配的问题,

为了简便起见,就讨论()[ ]  

去掉繁琐的return ERROR  栈容量不够处理。

例代码:

#include<stdio.h>
#include<string.h>
#include<malloc.h>

#define InitStackSize 1000

typedef struct SqStack
{
	char *top,*base;
	int stacksize;
}SqStack;

void InitSqStack(SqStack &s)
{
	s.base=s.top=(char*)malloc(InitStackSize*sizeof(char));
	s.stacksize =InitStackSize;
}

void PushSqStack(SqStack &s,char ch)
{
	*s.top=ch;
	s.top++;
}

bool EmptyStack(SqStack s)
{
	if(s.base==s.top) return true;
	else return false;
}

void PopSqStack(SqStack &s)
{
	s.top--;
}

char GetStackTop(SqStack s)
{
	if(EmptyStack(s)) return '#';
	else return *--s.top;
}

int BracketMatch(SqStack &s,char *st)
{
	char *p=st;
	char ch;
	while(*p!='\0')
	{
		switch(*p)
		{
			case '(':PushSqStack(s,*p);break;
			case '[':PushSqStack(s,*p);break;
			case ')':
			if(EmptyStack(s)) return 0;
		 	ch=GetStackTop(s);
 			if(ch=='(') PopSqStack(s);			
			else return 0; 
			break;	
			case ']':
			if(EmptyStack(s)) return 0;
			ch=GetStackTop(s);
			if(ch=='[') PopSqStack(s);
			else return 0;
			break;
			default:break;	
		}
		p++;
	}
	if(!EmptyStack(s)) return 0;
	return 1;
}

int main()
{
	SqStack stack;
	char str[InitStackSize]; //just including '('')''['']'
	printf("Input the bracket string:\n");
	while(scanf("%s",&str)!=EOF)
	{
		InitSqStack(stack);
		if(BracketMatch(stack,str)) printf("Match success!\n");
		else printf("Fail to match.\n");
	}
	
	return 0;
} 


2019-05-25 23:52:32 callmeCassie 阅读数 33
  • JavaWeb实战开发

    本课程详细讲解了以下内容:     1.jsp环境搭建及入门、虚拟路径和虚拟主机、JSP执行流程     2.使用Eclipse快速开发JSP、编码问题、JSP页面元素以及request对象、使用request对象实现注册示例     3.请求方式的编码问题、response、请求转发和重定向、cookie、session执行机制、session共享问题      4.session与cookie问题及application、cookie补充说明及四种范围对象作用域      5.JDBC原理及使用Statement访问数据库、使用JDBC切换数据库以及PreparedStatement的使用、Statement与PreparedStatement的区别      6.JDBC调用存储过程和存储函数、JDBC处理大文本CLOB及二进制BLOB类型数据      7.JSP访问数据库、JavaBean(封装数据和封装业务逻辑)      8.MVC模式与Servlet执行流程、Servlet25与Servlet30的使用、ServletAPI详解与源码分析      9.MVC案例、三层架构详解、乱码问题以及三层代码流程解析、完善Service和Dao、完善View、优化用户体验、优化三层(加入接口和DBUtil)     1 0.Web调试及bug修复、分页SQL(Oracle、MySQL、SQLSERVER)      11.分页业务逻辑层和数据访问层Service、Dao、分页表示层Jsp、Servlet      12.文件上传及注意问题、控制文件上传类型和大小、下载、各浏览器下载乱码问题      13.EL表达式语法、点操作符和中括号操作符、EL运算、隐式对象、JSTL基础及set、out、remove      14.过滤器、过滤器通配符、过滤器链、监听器      15.session绑定解绑、钝化活化      16.以及Ajax的各种应用      17. Idea环境下的Java Web开发

    3693 人正在学习 去看看 颜群

题目描述

检查字符串中方括号、圆括号和花括号是否配对

输入

每个字符串一行,以0表示输入结束

输出

true 或者 false 每个一行

样例输入

(12,11,44,[6,[9]),(#)
([#],([2],3,1}
([#],([2],3,1),7)
0

样例输出

false
false
true

代码实现

import java.util.Scanner;
import java.util.Stack;
public class Bracket {
	Stack<String> result=new Stack<String>();
	Stack<String> result1=new Stack<String>();
	public Bracket(){
		Scanner sc=new Scanner(System.in);
		String infix;
		while(!"0".equals(infix = sc.nextLine())){
		Stack<String> stack=new SeqStack<String>(infix.length());
		
		
		for(int i=0;i<infix.length();i++){
			char ch=infix.charAt(i);
			switch(ch){
			case'(':
				stack.push(ch+"");
				break;
			case')':
				if(!stack.isEmpty()&&stack.peek().equals("("))
					stack.pop();
				else
					stack.push(ch+"");
				break;
			case'[':
				stack.push(ch+"");
				break;
			case']':
				if(!stack.isEmpty()&&stack.peek().equals("["))
					stack.pop();
				else
					stack.push(ch+"");
				break;
			case'{':
				stack.push(ch+"");
				break;
			case'}':
				if(!stack.isEmpty()&&stack.peek().equals("{"))
					stack.pop();
				else
					stack.push(ch+"");
				break;
			}
		}
		if(stack.isEmpty())
			result.push("true");
		else
			result.push("false");
		}
		while(!result.isEmpty()){
			result1.push(result.peek());
			result.pop();
		}
		while(!result1.isEmpty()){
		System.out.println(result1.peek());
		result1.pop();
		}
	}
	public static void main(String args[]){
		Bracket b=new Bracket();
	}
}
class SeqStack<T> extends Stack<String> {
	public SeqStack(int length) {
		// TODO Auto-generated constructor stub
	}
}
2018-08-05 10:31:26 qq_42817826 阅读数 194
  • JavaWeb实战开发

    本课程详细讲解了以下内容:     1.jsp环境搭建及入门、虚拟路径和虚拟主机、JSP执行流程     2.使用Eclipse快速开发JSP、编码问题、JSP页面元素以及request对象、使用request对象实现注册示例     3.请求方式的编码问题、response、请求转发和重定向、cookie、session执行机制、session共享问题      4.session与cookie问题及application、cookie补充说明及四种范围对象作用域      5.JDBC原理及使用Statement访问数据库、使用JDBC切换数据库以及PreparedStatement的使用、Statement与PreparedStatement的区别      6.JDBC调用存储过程和存储函数、JDBC处理大文本CLOB及二进制BLOB类型数据      7.JSP访问数据库、JavaBean(封装数据和封装业务逻辑)      8.MVC模式与Servlet执行流程、Servlet25与Servlet30的使用、ServletAPI详解与源码分析      9.MVC案例、三层架构详解、乱码问题以及三层代码流程解析、完善Service和Dao、完善View、优化用户体验、优化三层(加入接口和DBUtil)     1 0.Web调试及bug修复、分页SQL(Oracle、MySQL、SQLSERVER)      11.分页业务逻辑层和数据访问层Service、Dao、分页表示层Jsp、Servlet      12.文件上传及注意问题、控制文件上传类型和大小、下载、各浏览器下载乱码问题      13.EL表达式语法、点操作符和中括号操作符、EL运算、隐式对象、JSTL基础及set、out、remove      14.过滤器、过滤器通配符、过滤器链、监听器      15.session绑定解绑、钝化活化      16.以及Ajax的各种应用      17. Idea环境下的Java Web开发

    3693 人正在学习 去看看 颜群

K 括号括号
时间限制 内存限制 出题人
1Second 512Mb 刘帅坤
题目描述
小明今年上大学,在大学里发现有很多同学都女朋友,两人整天都在一起腻歪,小明看到后感
觉很孤单,现在,给你一行括号序列,你来判断一下其中的括号是否配对。
输入
第一行输入一个数 N (0< N< 100)表示有N组测试数据。后面的N行输入多组输入数据,每组
输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保
证S中只含有”[“,”]”,”(“,”)” 四种字符 ,输入以“EOF”结束。
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则
输出No。
输入样例
3
[(])
(])
([])
输出样例
No
No
Yes
注意:此题的测试数据组是多组的。

括号匹配AC代码(c语言数据结构写法)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define STACK_INIT_SIZE 10000
#define STACKINCREMENT 10
typedef struct{
    char *top;
    char *base;
    int stacksize;
}SqStack;
int initstack(SqStack &S)
{
    S.base=(char*)malloc(STACK_INIT_SIZE * sizeof(char));
    if(!S.base)
    return 0;
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
    return 1;

}
int pop(SqStack &S)
{
    char e;
    if(S.top==S.base)
    return 0;
    e=*--S.top;
    return 1;
}
int stackempty(SqStack &S)
{
    if(S.top==S.base)
    return 1;
    if(S.top!=S.base)
    return 0;
}
int push(SqStack &S,char e)
{

    if(S.top-S.base>=S.stacksize)
    {
        S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT* sizeof(char)));
        S.base=S.base+S.stacksize;
        S.stacksize+=STACKINCREMENT;

    }
    *S.top++=e;
    return 1;
}
int gettop(SqStack &S)
{
    char e;
    if(S.top==S.base)
    return 0;
     e=*(S.top-1);
     return  e;
}

int main()
{
    SqStack S;
    char ch[10000],*p;
    int answer;
    int n;
    while(scanf("%d",&n)!=EOF)
    {

    getchar();
    while(n--)
    {

   scanf("%s",ch);
    {
        initstack(S);
        answer=0;
        p=ch;
    while(*p!='\0')
        {
            if(*p=='[')
            push(S,*p);
            else if(*p=='(')
            push(S,*p);
            else if(*p==']')
            {

                if(gettop(S)=='[')
                pop(S);
                else
                {
                answer=1;
                 break;
                }
             } 
             else if(*p==')')
             {
                if(gettop(S)=='(')
                {
                    pop(S);
                 }
                else
                 {
                  answer=1;
                  break;
                 }
             }
             else
             {
                answer=1;
                break;
             }

             p++;

        }
     if(answer==0&&stackempty(S))
    printf("Yes\n");
    else
    printf("No\n");
    }

}
}
    return 0;
}

括号匹配AC代码(c++stl中的stack写法)

#include<stdio.h>
#include<iostream>
#include<stack>
#include<string.h>
const int N=10000+1;
using namespace std;
stack<char>sk;
char str[N];
int main()
{
    int T,answer;
    while(~scanf("%d",&T))
    {

        getchar();
        while(T--)
        {
            answer=0;
            while(!sk.empty()) 
            sk.pop();
            memset(str,0,sizeof(str));
            gets(str);
            int len=strlen(str);
            for(int i=0;i<len;i++)
            {
                if(str[i]=='['||str[i]=='(')
                sk.push(str[i]);
                else if(str[i]==']')
                {
                    if(sk.top()=='[')
                    sk.pop();
                    else
                    {
                        answer=1;
                        break;
                    }
                }
                else if(str[i]==')')
                {
                    if(sk.top()=='(')
                    sk.pop();
                    else
                    {
                        answer=1;
                        break;
                    }
                }
            }
            cout<<sk.size()<<endl;
        if(answer==0&&sk.empty())
            printf("Yes\n");
            else
            printf("No\n");
        }
    }
    return 0;
}

思路:只要是左括号都入栈,当遇到右括号就判断它的栈顶元素是否为对应的左括号,如果是把栈顶元素出栈,不是则把answer置为1,只要有一个不匹配则无需再进行下去。
判断是否完全匹配,则看是否answer=0,因为一旦有不匹配的,则answer会=1,并且栈必须为空,为什么呢?比如((),此时遇到右括号他们是匹配的,但是多出一个左括号,如果不加上栈为空的条件则会判断这种情况是正确的,但其实是错误的。
光有一个栈是否为空行不行?不行,比如())的情况,遇到右括号出栈,此时栈为空,但并不完全匹配。
所以必须两个条件都满足。
这仅是一个思路,其它的写法也可以。

2015-10-21 13:50:49 CrazyCat8023 阅读数 464
  • JavaWeb实战开发

    本课程详细讲解了以下内容:     1.jsp环境搭建及入门、虚拟路径和虚拟主机、JSP执行流程     2.使用Eclipse快速开发JSP、编码问题、JSP页面元素以及request对象、使用request对象实现注册示例     3.请求方式的编码问题、response、请求转发和重定向、cookie、session执行机制、session共享问题      4.session与cookie问题及application、cookie补充说明及四种范围对象作用域      5.JDBC原理及使用Statement访问数据库、使用JDBC切换数据库以及PreparedStatement的使用、Statement与PreparedStatement的区别      6.JDBC调用存储过程和存储函数、JDBC处理大文本CLOB及二进制BLOB类型数据      7.JSP访问数据库、JavaBean(封装数据和封装业务逻辑)      8.MVC模式与Servlet执行流程、Servlet25与Servlet30的使用、ServletAPI详解与源码分析      9.MVC案例、三层架构详解、乱码问题以及三层代码流程解析、完善Service和Dao、完善View、优化用户体验、优化三层(加入接口和DBUtil)     1 0.Web调试及bug修复、分页SQL(Oracle、MySQL、SQLSERVER)      11.分页业务逻辑层和数据访问层Service、Dao、分页表示层Jsp、Servlet      12.文件上传及注意问题、控制文件上传类型和大小、下载、各浏览器下载乱码问题      13.EL表达式语法、点操作符和中括号操作符、EL运算、隐式对象、JSTL基础及set、out、remove      14.过滤器、过滤器通配符、过滤器链、监听器      15.session绑定解绑、钝化活化      16.以及Ajax的各种应用      17. Idea环境下的Java Web开发

    3693 人正在学习 去看看 颜群
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <string>
#include <queue>
#include <set>
#include <vector>
#include <algorithm>
#include <stack>
using namespace std;
#define dx 100
#define zl 10
int bz[3][3]={1,0,0,0,1,0,0,0,1};
typedef struct LNode
{
    char *base;
    char *top;
	int stacksize; 
}sqstack;
int Init(sqstack &S) //开辟栈空间    
{   
    S.base=(char *)malloc(dx*sizeof(char));
    if(!S.base)  return -2;
    S.top=S.base;
    S.stacksize=dx;
    return 1;
}
int StackEmpty(sqstack &S) //检测栈是否为空 
{ 
    if(S.top==S.base)  return 1;
    return 0;
}
int Push(sqstack &S,char e) //入栈 
{ 
    if(S.top-S.base>=S.stacksize)
    {
    	S.base=(char *)realloc(S.base,(S.stacksize+zl)*sizeof(char));
    	if(!S.base)  return -2;
    	S.top=S.base+S.stacksize;
    	S.stacksize+=zl;
    }
    *S.top++=e;
    return 1;
}
int  Pop(sqstack &S)//删除栈顶元素 
{ 
    if(S.top==S.base)  return -1;
    --S.top;          return 1;
}
int Top(sqstack &S,char &e)//访问栈顶元素 
{
    if(S.top==S.base)  return -1;
    e=*(S.top-1);      return 1;
}
int is_PP(char s1,char s2)//检查括号是否匹配 
{
	string str1="[({";
	string str2="])}";
	return bz[str1.find(s1)][str2.find(s2)];
}
int is_FX(char c)//检查括号的方向 
{
	if(c=='['||c=='('||c=='{')   return 1;
	else                         return 0;
} 
void is_empty(sqstack &S)//清空栈 
{
	if(S.top!=S.base)
	    S.top=S.base;
}
int main()
{
	char s[105],e;
	sqstack S; Init(S);
	while(cin>>s)
	{
	   int flag=0;
	   for(int i=0;s[i]!='\0';i++)
	   {
		  if(is_FX(s[i]))  Push(S,s[i]);
		  else     
		  {
			if(StackEmpty(S))  
		    {
			   cout<<"0"<<endl;
			   flag=1;
			   break;
			}
			else
			{
			    Top(S,e);
				if(is_PP(e,s[i]))
				{
					Pop(S);
				}
				else
				{
					cout<<"0"<<endl;
			        flag=1;
			        break;
				}
			}
		  }
	   }
	  if(flag==0)
	  {
	    if(StackEmpty(S)) cout<<"1"<<endl;
	    else             cout<<"0"<<endl;
	  }
	  is_empty(S);
    }
    return 0;
}

2019-04-02 20:30:34 qq_33125039 阅读数 152
  • JavaWeb实战开发

    本课程详细讲解了以下内容:     1.jsp环境搭建及入门、虚拟路径和虚拟主机、JSP执行流程     2.使用Eclipse快速开发JSP、编码问题、JSP页面元素以及request对象、使用request对象实现注册示例     3.请求方式的编码问题、response、请求转发和重定向、cookie、session执行机制、session共享问题      4.session与cookie问题及application、cookie补充说明及四种范围对象作用域      5.JDBC原理及使用Statement访问数据库、使用JDBC切换数据库以及PreparedStatement的使用、Statement与PreparedStatement的区别      6.JDBC调用存储过程和存储函数、JDBC处理大文本CLOB及二进制BLOB类型数据      7.JSP访问数据库、JavaBean(封装数据和封装业务逻辑)      8.MVC模式与Servlet执行流程、Servlet25与Servlet30的使用、ServletAPI详解与源码分析      9.MVC案例、三层架构详解、乱码问题以及三层代码流程解析、完善Service和Dao、完善View、优化用户体验、优化三层(加入接口和DBUtil)     1 0.Web调试及bug修复、分页SQL(Oracle、MySQL、SQLSERVER)      11.分页业务逻辑层和数据访问层Service、Dao、分页表示层Jsp、Servlet      12.文件上传及注意问题、控制文件上传类型和大小、下载、各浏览器下载乱码问题      13.EL表达式语法、点操作符和中括号操作符、EL运算、隐式对象、JSTL基础及set、out、remove      14.过滤器、过滤器通配符、过滤器链、监听器      15.session绑定解绑、钝化活化      16.以及Ajax的各种应用      17. Idea环境下的Java Web开发

    3693 人正在学习 去看看 颜群

算法与数据结构之LeetCode——判断字符串的括号是否匹配

0.前言

判断括号字符串是否有效,即要求左右括号个数要匹配。
参考网址:有效的括号字符串
参考网址:leetcode上做的一道判断括号字符串是否有效的问题在这里插入图片描述
关键是对应的括号要一一匹配

1.解决措施

1.1 方法一

堆栈思想:时间和空间复杂度都为:O(n),具体思路见代码解释!

#!/usr/bin/python
SS = "{()}[]";
def IsValid(S):
	stack = [];
	paren_map = {')':'(',']':'[','}':'{'}; # 那右括号为键,左括号为值,这个技巧重要(PS:保证加入栈中的括号都是左括号)
	for c in S:
		if c not in paren_map: # 是左括号就加入栈,
			stack.append(c);
		elif not stack or paren_map[c]!=stack.pop(): # 如果栈顶有元素则判断刚刚这个右括号是否与栈顶元素匹配
			return False;
	return not stack;
print(IsValid(SS));

1.2 方法二

简单粗暴法:直接对一一对应好的括号给删除掉,留下来的长度为0才是合法的

#!/usr/bin/python
SS = "{})[]";
def IsValid(S):
	length = 0;
	try:
		while(length != len(S)): #如果长度相等就退出,但是后面有判断,要是为0并且相等才是合法的
			length = len(S);
			S = S.replace("()","").replace("[]","").replace("{}","");
	except ValueError:
		return False;
	return len(S)==0;
		
	
print(IsValid(SS));

数据结构之括号匹配

博文 来自: a_little_snail
没有更多推荐了,返回首页