`
sxpyrgz
  • 浏览: 72480 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

经典的一个表结构

    博客分类:
  • java
阅读更多

最近在写一个比较复杂的业务程序,其中有个这样一张表,

1、它即可以实现每条记录之间的或者是所有记录上的部分区域的链式结构

2、它也可以实现两条记录间的与非关系统,

3、它还可以实现几条记录之间的优先级关系。括号语法。

4、它可以进行几条数据之间的并行操作.

 

现列出经典部分代码:

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
 <head>
  <script  language="javascript">
 // Array还有sort()、reverse()、splice(pos,count)--从数组的第pos位开始,删除count个元素//;splice(pos,count,"element1","element2")--替换或删除
	check = function(){
		return false;
	
	
	}
  //堆栈类
  function Stack(){
	 this.stack = new Array();
  }
  Stack.prototype.push = function(obj){
	this.stack.push(obj);
  }
  Stack.prototype.pop = function(){
	if(this.length()==0){
		//alert("暂无元素");
		return 
	}
	return this.stack.pop();
  }
   Stack.prototype.lastElement = function(){
	if(this.length()==0){
		//alert("暂无元素");
		return 
	}
	return this.stack[this.length()-1];
  }
  Stack.prototype.length  = function(){
	return  this.stack.length;
  }
  
  Stack.prototype.toString  =  function (){ 
	return this.stack.toString();
  }
 function checkBracket(objArray){
		var  bracketStack = new Stack();
		var  sb = new Array();
		//存放每次括号中运算的结果
		var  result = "";
		/***
		 * 如果判断的字符串不是以(开头,则进行,首未加括号
		 */
		 if(objArray[0]!="("){
			for(var i = 0 ;i< objArray.length;i++){
				objArray[objArray.length-i] = objArray[objArray.length-i-1];
		
			}
			objArray[0] = "(";
			objArray[objArray.length]= ")";
		}
		 if(objArray[objArray.length-1]!=")"){
			for(var i = 0 ;i< objArray.length;i++){
				objArray[objArray.length-i] = objArray[objArray.length-i-1];
			}
			objArray[0] = "(";
			objArray[objArray.length]= ")";
		}
		
			
			for(var i=0; i<objArray.length; i++) 
			{
				var  temp = objArray[i]
				switch(temp){
					case ')': 
						debugger;
						 sb =  new Array();
						 var lastElement = bracketStack.lastElement();
						 if(lastElement == undefined){
							alert("括号匹配有问题!");
							return ;
						 }
						 //将第一个括号中的内容出栈
						while(lastElement !="(" && bracketStack.length()>0){
							 bracketStack.pop();
							 sb.push(lastElement);
							 lastElement = bracketStack.lastElement();
							if(lastElement =="("){
								 bracketStack.pop();
							}
						}
						if(bracketStack.length() == 0){
							
							result = check(sb);
							break;
						}else{
							bracketStack.push(check(sb));
						}
						alert(sb.toString());
						 break;
					case '(': 
						/**
						 * 将左括号进栈
						 */
						bracketStack.push(temp);
						break;
					default : 
						//将非括号的存放到临时数组
						bracketStack.push(temp);
						break;
				}
			}
		
			if(bracketStack.length()>0){
				alert("括号匹配有误!!!!!");
				return false;
			}else{
				alert(result);
			 
			}
	 
			return true;
			
	}
	var obj1 = {
				logic: "or",
				value: 1,
				leftBracket :"((",
				rightBracket :""
			}
			
			var obj2 = {
				logic: "and",
				value: 2,
				leftBracket :"",
				rightBracket :""
			}
			var obj3 = {
				logic: "and",
				value: 3,
				leftBracket :"(",
				rightBracket :""
			}
			var obj4 = {
				logic: "or",
				value: 4,
				leftBracket :"",
				rightBracket :")"
			}
			var obj5 = {
				logic: "or",
				value: 5,
				leftBracket :"(",
				rightBracket :""
			}
			var obj6 = {
				logic: "and",
				value: 6,
				leftBracket :"",
				rightBracket :")"
			}
			var obj7 = {
				logic: "or",
				value: 7,
				leftBracket :"",
				rightBracket :""
			}
			var obj8 = {
				logic: "or",
				value: 8,
				leftBracket :"",
				rightBracket :"))))"
			}
		var objArray = new Array();
		objArray.push(obj1);
		objArray.push(obj2);
		objArray.push(obj3);
		objArray.push(obj4);
		objArray.push(obj5); 
		objArray.push(obj6);
		objArray.push(obj7);
		objArray.push(obj8);
		var array  = new Array();
		for(var i = 0 ;i<objArray.length;i++){
			var condition = objArray[i];
			var leftBracket  =condition.leftBracket;
			var rightBracket = condition.rightBracket;
		
			if(leftBracket!=""){
				for(var j = 0 ;j<leftBracket.length;j++){
					 array.push("(");
				}
			}
		    array.push(condition);
			if(rightBracket!=""){
				for(var j = 0 ;j<rightBracket.length;j++){
					 array.push(")");
				}
			}
			 array.push(condition.logic);

		}
		array.pop();
		var flag = false;
		for(var i = 0 ;i<array.length;i++){
			var obj =  array[i];
			if (obj == "(" || obj == ")" || obj == "and" || obj =="or")
			{
				continue;

			}else{
				if(obj.value == 5){
					flag = true;
				}
				if(flag){
					array[i] ="-";
				}
			}
		};
		var bracketFlag = checkBracket(array);

  </script>
 </head>
 <body>
 </body>
</html>

 JAVA代码
 /**
  *
  * @param str
  * @return
  */
 public static String checkBracket(String str ){
  Stack bracketStack = new Stack();
  StringBuffer sb = new StringBuffer();
  String result = "";
  /***
   * 如果判断的字符串不是以(开头,则进行,首未加括号
   */
  if(str.charAt(0)!='('){
   str = "("+str+")";
  }
  try{
  for(int i=0; i<str.length(); i++)
  {
   
   char temp = str.charAt(i);
   switch(temp){
   
    case ')':
      if(!result.equals("")){
      
      result = check(result+sb.toString());
      // result = sb.toString();
       System.out.println(sb.toString());
     
      }else{
      
       result = check(sb.toString());
      // result = sb.toString();
       System.out.println(sb.toString());
      }
      sb = new  StringBuffer();
      String lastElement = bracketStack.lastElement().toString();
      //将第一个括号中的内容出栈
     while(!lastElement.equals("(")){
       bracketStack.pop();
       lastElement = bracketStack.lastElement().toString();
     }
     //将左括号出栈
     bracketStack.pop();
     /**
      * 看左括号前面是否为(
      * 如果不是则进行出栈
      * 如果是,继续下一个字符串的读取
      */
      lastElement = bracketStack.lastElement().toString();
     if(!lastElement.equals("(")){
      lastElement = (String)bracketStack.pop();
     // System.out.println(lastElement+result);
      sb.append(lastElement+result);
     }
      break;
    case '(':
     bracketStack.push(sb.toString());
     sb = new StringBuffer();
     bracketStack.push(temp);
     break;
    default :
     sb.append(temp);
     break;
   }
  }
  }catch(Exception e){
   System.out.println("括号不匹配");
  }
 
  Iterator  it= bracketStack.iterator();
  while(it.hasNext()){
   
   System.out.println(it.next());
  }
 //  System.out.println("first ==========="+bracketStack.lastElement());
  return result;
 }

0
0
分享到:
评论

相关推荐

    我的经典表结构

    ### 经典表结构设计与多表关联设置详解 #### 一、引言 在数据库设计领域,合理的表结构设计是构建高效、可扩展数据库系统的基石。本文将围绕“我的经典表结构”这一主题,深入探讨如何进行有效的表结构设计,并...

    emp_dept表结构和表数据

    在本案例中,我们有两个文件:`emp_dept表数据.sql` 和 `emp_dept表结构.sql`,它们分别提供了表的数据和结构信息。 首先,让我们详细了解一下"emp" 表。这个表通常包含公司员工的相关信息,例如: 1. **EMPNO**...

    mysql必知必会-表结构代码-源代码-分章节知识点总结.zip

    总的来说,这个压缩包提供了一个全面的学习和实践MySQL的机会,从基础的表结构创建到数据操作,再到高级的查询技巧,都是深入掌握MySQL所必需的知识点。通过实际操作这些SQL脚本,你将能够更好地理解和应用书中讲解...

    《数据库系统概念(第七版)》- 表结构及课后习题答案.rar

    主键是表结构中的一个重要概念,它是一个或一组字段,其值能唯一标识表中的每一行,确保数据的完整性。此外,外键用于建立不同表之间的关联,实现数据的一致性和参照完整性。 在压缩包中,"数据库系统概念(第七版...

    MySQL表结构导出world.rar

    本资源“MySQL表结构导出world.rar”是一个压缩包,旨在帮助用户方便地导出名为“world”的数据库的表结构。这个过程对于备份、迁移或共享数据库设计非常有用。 在使用这个压缩包之前,首先需要了解如何解压文件。...

    数据结构原理与经典问题求解(源代码) + 勘误表

    总的来说,"数据结构原理与经典问题求解"这本书,配合源代码和勘误表,为学习者提供了一个全面了解和掌握数据结构及其应用的平台。无论你是初学者还是经验丰富的程序员,都可以从中受益,提升自己的编程和问题解决...

    顺序表经典排序算法数据结构

    它选择一个基准值,将数组分为两部分,一部分所有元素小于基准,另一部分所有元素大于基准,然后对这两部分递归地进行快速排序。在平均情况下,快速排序的时间复杂度为O(n log n),但在最坏情况下(输入数组已排序或...

    数据结构经典算法总结

    循环链表是链表的一种特殊形式,其最后一个元素的指针指向列表的开头,形成一个环状结构。这种结构在查找头尾节点时具有O(1)的时间复杂度,适合频繁的插入和删除操作。在选择线性表的存储结构时,应根据操作特性和...

    数据库工具,根据表结构文档生成创建表sql,根据数据库表信息导出Model和表结构文档,根据文档生成数据库表

    同时,对于对数据结构感兴趣的非专业人士,这份资料也是一个很好的起点。 使用建议: 结合理论和实践:在学习的过程中,请结合算法代码和理论知识。尝试自己编写代码实现数据结构,并在遇到问题时参考提供的代码。...

    经典Orcale 练习题的表结构和数据+PDF文档+查询语句

    本文件中,包含了Orcale的经典40题,仅供参考,希望能有热心的小伙伴,积极讨论,欢迎指出错误,或更好的解决方法~ 练习题的表结构和数据+PDF文档+SQL查询语句。 本来想免费的,结果设置不了免费,至少1分 0.0

    数据结构经典实例·

    例如,当我们需要快速查找一个元素时,可能首选散列结构;如果要对数据进行排序,可以选择快速排序、归并排序或堆排序等算法。理解这些数据结构和算法的工作原理,并能灵活运用,是成为一名优秀程序员的必备技能。 ...

    史上最全最经典数据结构-100个经典算法

    1. **河内塔 (Towers of Hanoi)**: 这是一个经典的递归问题,通过三个柱子和若干个大小不一的圆盘,演示了如何在遵循特定规则(大盘子不能放在小盘子之上)的情况下,将所有圆盘从一个柱子移动到另一个柱子。...

    C++数据结构原理与经典问题求解+勘误表

    《C++数据结构原理与经典问题求解》是一本深入探讨C++编程中数据结构理论与实践的权威著作。本书由左飞编写,旨在帮助读者理解数据结构的基础知识,并掌握如何利用C++来实现和解决实际问题。数据结构是计算机科学中...

    Falcon的管理脚本 数据库表结构等.zip

    【标题】"Falcon的管理...综上所述,这个压缩包对于正在学习数据结构和数据库管理的学生来说是一个宝贵的资源集合,它涵盖了理论知识、编程实践和数据库设计的各个方面,有助于提升编程技能和理解数据处理的底层原理。

    数据结构经典教材

    例如,二叉搜索树用于快速查找,哈希表用于高效查找,而图数据结构则常用于表示网络和关系等复杂场景。 通过阅读这些教材,你还可以了解到抽象数据类型(ADT)的概念,它是数据结构理论的核心。ADT定义了一组操作和...

    数据结构的经典题目编程

    在经典题目中,我们可能需要实现二叉树的遍历(前序、中序、后序),查找、插入和删除节点,或者解决与二叉树相关的特性问题,比如判断一个树是否是对称的,计算高度,或找到最近的公共祖先。这些操作对于理解和优化...

    经典表关联与多表查询

    本资源将详细介绍经典表关联与多表查询的目的、基本概念、语法结构、应用场景和注意事项。 目的: 经典表关联与多表查询的主要目的是掌握从多个表查询数据的基本知识,了解和学习外连接(out join)和内连接(self...

    数据结构绝对经典算法

    描述中的“对大家学习绝对有不小的帮助”,暗示了这个压缩包可能包含一系列经典的数据结构实现和算法实例,可以帮助学习者更好地理解和应用这些理论知识。通常,这样的资源会覆盖线性结构(如数组、链表)、树形结构...

    数据结构 算法 经典教程

    本书的一个重要特点是在内容和章节编排上与1992年4月出版的《数据结构》第二版基本一致,但在新版中更加强调了抽象数据类型的概念。全书采用类似C语言的描述语言来表达数据结构和算法,这种描述方式考虑了C语言的...

    emp,dept经典数据库练习表

    根据提供的信息,我们可以详细解析与"emp,dept经典数据库练习表"相关的知识点,这包括了表结构设计、数据插入操作以及这些练习表在学习数据库管理中的应用价值。 ### 一、表结构设计 #### 1. **DEPT 表结构** - *...

Global site tag (gtag.js) - Google Analytics