2014-11-19 21:13:12 yang_best 阅读数 2270
  • 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 人正在学习 去看看 颜群

今天把数据结构学习的代码拿出来和网友分享一下,应该测试能过!

8586 括号匹配检验


Time Limit:1000MS  Memory Limit:1000K
Total Submit:679 Accepted:182

Type: Program   Language: Not Limited
Description

利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正确的格式。输入一个包含上述括号的表达式,检验括号是否配对。本题给出部分check()函数,要求将check()函数补充完整,并完成整个程序。
typedef char SElemType;
#include"malloc.h"
#include"stdio.h"
#include"math.h"
#include"process.h" // exit()
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
#define STACK_INIT_SIZE 10 // 存储空间初始分配量
#define STACKINCREMENT 2 // 存储空间分配增量
struct SqStack
{
 SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL
 SElemType *top; // 栈顶指针
 int stacksize; // 当前已分配的存储空间,以元素为单位
 }; // 顺序栈
Status InitStack(SqStack &S)
{
 }

Status StackEmpty(SqStack S)
{

 }
Status Push(SqStack &S,SElemType e)
{
 }
 Status Pop(SqStack &S,SElemType &e)
{
 }
void check()
 { // 对于输入的任意一个字符串,检验括号是否配对
   SqStack s;
   SElemType ch[80],*p,e;
   if(InitStack(s)) // 初始化栈成功
   {
    //printf("请输入表达式\n");
     __________________________________;
     p=ch;
     while(*p) // 没到串尾
       switch(*p)
       {
         case '(':
         case '[':_______________________;
                  break; // 左括号入栈,且p++
         case ')':
         case ']':if(!StackEmpty(s)) // 栈不空
                  {
                   _________________________; // 弹出栈顶元素
                    if(*p==')'&&e!='('||___________________&&___________________)
                                                // 弹出的栈顶元素与*p不配对
{
                      printf("isn't matched pairs\n");
                      exit(ERROR);
                    }
                    else
                    {
                     __________________________;
                      break; // 跳出switch语句
                    }
                  }
                  else // 栈空
                  {
                    printf("lack of left parenthesis\n");
                    exit(ERROR);
                  }
         default: ______________________; // 其它字符不处理,指针向后移
       }
     if(StackEmpty(s)) // 字符串结束时栈空
       printf("matching\n");
     else
       printf("lack of right parenthesis\n");
   }
 }
void main()
 {
   check();
 }



Input

第一行:输入一个包含圆括号或方括号、不超过80个字符的表达式串。

Output

第一行:若输入表达式括号匹配,输出"matching"; 若不匹配,输出具体信息:"isn't matched pairs", 或"lack of left parenthesis"或"lack of right parenthesis"
Sample Input

8*[3*(35-23)]
Sample Output

matching
Author

yqm

答案:

typedef char SElemType;
#include"malloc.h"
#include"stdio.h"
#include"math.h"
#include"stdlib.h" // exit()
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
#define STACK_INIT_SIZE 10 // 存储空间初始分配量
#define STACKINCREMENT 2 // 存储空间分配增量
struct SqStack
{
 SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL
 SElemType *top; // 栈顶指针
 int stacksize; // 当前已分配的存储空间,以元素为单位
 }; // 顺序栈
Status InitStack(SqStack &S)
{
    S.base =(SElemType*)malloc(STACK_INIT_SIZE *sizeof(SElemType));
    if(!S.base ) return FALSE;
    S.top =S.base ;
    S.stacksize =STACK_INIT_SIZE;
    return OK;
}

Status StackEmpty(SqStack S)
{
    if(S.base ==S.top ) return 1;
    else return 0;
 }
Status Push(SqStack &S,SElemType e)
{
    if(S.top -S.base >=S.stacksize  )
    {
        S.base =(SElemType*)realloc(S.base ,(S.stacksize +STACKINCREMENT)*sizeof(SElemType));
        if(!S.base )  return FALSE;
        S.top =S.base +S.stacksize ;
        S.stacksize +=STACKINCREMENT;
    }
    *(S.top )=e;
    S.top ++;
    return OK;
    

 }
 Status Pop(SqStack &S,SElemType &e)
{
    if(S.base ==S.top )
    return FALSE;
    --S.top ;
    e=*(S.top );
    return OK;

 }
void check()
 { // 对于输入的任意一个字符串,检验括号是否配对
   SqStack s;
   SElemType ch[80],*p,e;
   if(InitStack(s)) // 初始化栈成功
   {
    //printf("请输入表达式\n");
     gets(ch);
     p=ch;
     while(*p) // 没到串尾
       switch(*p)
       {
         case '(':
         case '[':Push(s,*p++);
                  break; // 左括号入栈,且p++
         case ')':
         case ']':if(!StackEmpty(s)) // 栈不空
                  {
                   Pop(s,e); // 弹出栈顶元素
                    if(*p==')'&&e!='('||*p==']'&&e!='[')
                                                // 弹出的栈顶元素与*p不配对
                    {
                      printf("isn't matched pairs\n");
                      exit(ERROR);
                    }
                    else
                    {
                     p++;
                      break; // 跳出switch语句
                    }
                  }
                  else // 栈空
                  {
                    printf("lack of left parenthesis\n");
                    exit(ERROR);
                  }
         default: p++;; // 其它字符不处理,指针向后移
       }
     if(StackEmpty(s)) //字符串结束时栈空
       printf("matching\n");
     else
       printf("lack of right parenthesis\n");
   }
 }
int main()
 {
   check();
 }



 
2017-03-14 22:43:49 u013261055 阅读数 866
  • 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 人正在学习 去看看 颜群

一、       题目

假设表达式中可以允许包含三种括号:圆括号"("和")",方括号"["和"]"和花括号"{"和"}",且这三种括号可按任意的次序嵌套使用。即([]())或者({[()]})等为正确格式,[{}]或者{[()]}均为不正确的格式。编写判别给定表达式中所含括号是否正确配对出现的算法。

二、       思路

检验括号是否匹配的方法可以用“期待的急迫程度”这个概念来描述。例如,考虑下列括号序列:

[ ( [ ] [ ] ) ]

1 2 3 4 5 6 7 8

当计算机接受了第一个括号后,它期待着与其匹配的第八个括号的出现,然而等来的却是第二个括号,此时第一个括号“[”只能暂时靠边,而迫切等待与第二个括号相匹配的、第七个括号“)”的出现,类似地,因等来的是第三个括号“[”,其期待匹配的程度较第二个括号更急迫,则第二个括号也只能靠边,让位于第三个括号,显然第二个括号的期待急迫性高于第一个括号;在接受了第四个括号之后,第三个括号的期待得到满足,消解之后,第二个括号的期待匹配就成为当前最急迫的任务了,……依此类推。

由上述描述可知,这个处理过程和栈的特点非常吻合,因此,我们可以用栈来解决这个问题。

解决思路:

1.在算法中设置一个栈,每次读入一个符号;

2.若是左符号,则作为一个新的更急迫的期待压入栈中,自然使原有的在栈中的所有未消解的期待的急迫性都降低一级;

3.若是符号为右符号,如果使置于栈顶的最急迫的期待得以消解,此时将栈顶的符号弹出;

4.若是符号为右符号,没有使置于栈顶的最急迫的期待的一消解,则直接返回false;

5.在算法的开始和结束时,栈应该为空,此时返回true。

三、       代码展示

已知:

Stack是一个已实现的栈。

可使用的相关类型和函数:

bool InitStack(Stack &s);

bool Push(Stack &s, char e);

bool Pop(Stack &s, char &e);

bool StackEmpty(Stack s);

bool GetTop(Stack s, char &e);

 bool matchCheck(char *p_pElem, const int p_nElemSize)
 /* 顺序表exp表示表达式;                        */
 /* 若exp中的括号配对,则返回TRUE,否则返回FALSE */
 {
	if (NULL == p_pElem)
		return false;
	
    Stack s;
    char e;
	bool bRet = false;
    //逐个读入括号
    for(int i=0;i<p_nElemSize;i++)
    {
        if(p_pElem[i]=='('||p_pElem[i]=='{'||p_pElem[i]=='[')//若遇左括号,则直接入栈
        {            
            Push(s,p_pElem[i]);
			continue;
        }
        else if(p_pElem[i]==')' || p_pElem[i]=='}' || p_pElem[i]==']')//若遇右圆括号,则尝试匹配栈顶括号
        {            
            bRet = GetTop(s, e);
			if (!bRet)
			{
				return false;
			}
			
			if ( ('(' == e && p_pElem[i]==')') || ('{' == e && p_pElem[i]=='}') || ('[' == e && p_pElem[i]==']') )//匹配成功,左圆括号出栈
				Pop(s, e);			
			else	 //匹配不成功,返回false
				return false;
        }
		else
		{
			return false;
		}
    }
	
    if(StackEmpty(s))//当所有括号匹配成功时,栈应为空
    {
        return true;
    }
    else
    {
        return false;
    }
}

一、       说明

题目及解题思路来自于严蔚敏老师的《数据结构》一书,本文仅仅将思路用代码实现。



2019-06-01 11:49:45 yp25843 阅读数 118
  • 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 人正在学习 去看看 颜群

【数据结构】 栈的应用-括号匹配

实验要求:
括号匹配检验:假设表达式中允许包括两种括号:圆括号和方括号,其嵌套的顺序随意,即()或[([][])]等为正确的格式,[(])或([())等均为不正确格式。输入一个表达式,判断其中的括号是否能正确匹配。

代码实现:
1,头文件

#define MAX 100 //栈的最大值
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STACKSIZE 100
#define STACKNUMBER 10
#define OK 0
#define ERROR 1
#define OVERFLOW -2
typedef int Status;
typedef char  SElemType;  //元素类型

2.结构体

typedef struct
{
    SElemType *base;
    SElemType *top;
    int  stacksize;
} SqStack;

3.菜单

Status InitStack(SqStack &S);//构建一个空栈s
Status Pop(SqStack &S);//删除栈顶元素
Status Push(SqStack &S,SElemType e);//插入元素
Status Check(SqStack &S,SElemType e);//判断

4.函数实现

//构建一个空栈
Status InitStack(SqStack &S)
{
    S.base=(SElemType*)malloc(STACKSIZE*sizeof(SElemType));
    if(!S.base)
        exit(-2);
    S.top=S.base;
    S.stacksize=STACKSIZE;
    return OK;
}
//插入元素
Status Push(SqStack &S,SElemType e)
{
    if(S.top-S.base>=S.stacksize)
    {
        S.base
       =(SElemType*)realloc(S.base,((S.stacksize+STACKNUMBER)*sizeof(SElemType)));
        if(S.base==NULL) return ERROR;
        S.top=S.stacksize+S.base;
        S.stacksize+=STACKNUMBER;
    }
    *S.top++=e;
    return OK;
}
//删除栈顶元素
Status Pop(SqStack &S)
{
    if(S.top==S.base)
    {
        return ERROR;
    }
    --S.top;
    return OK;
}
//检查元素
Status Check(SqStack &S,SElemType e)
{
   if(e==')'&&*(S.top-1)=='('||e=='}'&&*(S.top-1)=='{'||e==']'
   &&*(S.top-1)==']'||e=='>'&&*(S.top-1)=='<')
    {
        Pop(S);
    }
  else
  {
       Push(S,e);
  }
}

5.main函数

int main()
{   SqStack S;
    int i;
    char str[1000];
    InitStack(S);
    scanf("%s",&str);
    for(i=0;i<strlen(str);i++)
    {
     if(str[i]=='('||str[i]=='{'||str[i]=='['||str[i]=='<')
            {
              Push(S,str[i]);
            }
       else if(str[i]==')'||str[i]=='}'||str[i]==']'||str[i]=='>')
       {
           Check(S,str[i]);
       }
    }
    if(S.top==S.base)
    {
        printf("没有语法错误,括号匹配成功");
    }
    else
    {
        printf("有语法错误,括号匹配失败");
    }
    return 0;
}
2014-05-04 09:00:24 u011390632 阅读数 1152
  • 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<stack>
using namespace std;
int main()
{
	stack<char> sta;
	char ch = getchar();
	while(ch!=EOF)
	{

	while(ch!=EOF&&ch!='\n')
	{
		switch (ch)
		{
		case'#'://出栈
			sta.pop();
			break;
		case '@'://清空栈
			while (!sta.empty())
			{
				sta.pop();
			}
			break;
		default://入栈
			sta.push(ch);
			break;
		}
		ch = getchar();
	}
	while (!sta.empty())
	{
		cout<<sta.top();
		sta.pop();
	}
	cout<<endl;

	if (ch!=EOF)
	{
		ch = getchar();
	}
	}
return 0;
}
括号匹配检验程序:

#include<iostream>
#include<stack>
#include<string>
using namespace std;
#define aa '('
bool fun()
{
	string ss;
	cin>>ss;
	stack<char> sta;
	//左括号枚举类型
	char LBracket[] = {'(','{', '[','<'};
	//右括号枚举类型
	char RBracket[] = {')', '}',']', '>'};
	string::iterator iter = ss.begin();
	for(;iter!=ss.end();iter++)
	{
		if(find(LBracket,LBracket+4,(*iter)))//左括号则入栈
		{
			sta.push((*iter));
			continue;
		}
		if(find(RBracket,RBracket+4,(*iter)))//右括号则出栈
		{
			if(sta.top() == (*iter))
			{
				sta.pop();
				continue;
			}
			else
			{
				return false;
			}
		}
		return false;
	}
	return true;
}

int main()
{
	if(fun())
	{
	 cout<<"匹配!"<<endl;
	}
	else
	{
	 cout<<"不匹配!"<<endl;
	}
}



2011-03-23 20:32:00 baoyiming1991 阅读数 5171
  • 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 人正在学习 去看看 颜群

假设表达式中允许包含两种括号:圆括号和方括号,其嵌套顺序随意,及([]())或[([][])]等均为正确的格式,[(])或([())或(()]均为不正确的格式。

匹配算法的思想是:

首先将第一个括号压入栈,然后从第二个括号开始,如果与栈顶元素能匹配,能将栈顶元素弹出;如果不匹配,则将该元素压入栈中。

当带匹配字符串遍历结束后,检查栈是否为空,为空则表示匹配成功了,如果非空则表示还有括号未能匹配,即该字符串匹配失败。

具体代码:

 

括号匹配

阅读数 49

没有更多推荐了,返回首页