栈应用之平衡符号

栈的应用:检查每件事情是否能成对出现,算法叙述:

做一个空栈。读入字符直到文件结尾。如果字符是一个开放符号,则将其推入栈中。如果字符是一个封闭符号,则当栈为空时报错。否则,将栈元素弹出。如果弹出的符号不是对应的开放符号,则报错。在文件结尾,如果栈非空则报错。

public class BalanceSigned {

	@SuppressWarnings("unchecked")
	public static void checkChar(char[] words,int size){
		boolean error = false;
		//创建空栈
		Stack s = createStack();
		for(char c:words){
			switch(c){
			case ‘(‘:
			case ‘{‘:
			case ‘[‘:
				s.push(c);
				break;
			case ‘)‘:
			case ‘}‘:
			case ‘]‘:
				if(s.isEmpty()){
					System.out.println("Error,"+ c +" is no match.");
				}else{
					char cc = (char) s.pop();
					if((c==‘)‘&&cc!=‘(‘)||(c==‘}‘&&cc!=‘{‘)||(c==‘]‘&&cc!=‘[‘)){
						System.out.println("Error,"+ cc +" mismatch "+ c);
					}
				}
				break;
			}
		}
		if(!s.isEmpty()){
			System.out.println("Error,sign is remaining.");
		}
	}

	public static Stack createStack(){
		Stack s = new Stack();
		return s;
	}
	public static void main(String[] args) {
		char[] ch ={‘(‘,‘2‘,‘}‘,‘}‘};
		checkChar(ch,3);
	}
}
时间: 2024-10-07 16:45:32

栈应用之平衡符号的相关文章

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

#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

习题3.18 检测平衡符号(/* */ 不知怎么做)

/* 检测平衡符号 */ #include<stdio.h> #include<stdlib.h> struct stack; typedef struct stack * PtrToStack; struct stack{ char *Array; int TopOfStack; int Capacity; }; PtrToStack CreateStack( int MaxSize ) { PtrToStack p; p = malloc(sizeof(struct stack

用栈实现字符平衡

今天学了数据结构的栈,里面讲了一个用栈实现字符平衡.用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=

七、栈实现c语言符号的匹配

1.LinkList.h #ifndef _LINKLIST_H_ #define _LINKLIST_H_ typedef void LinkList; typedef struct _tag_LinkListNode LinkListNode; struct _tag_LinkListNode { LinkListNode* next; }; LinkList* LinkList_Create(); void LinkList_Destroy(LinkList* list); void Li

浅谈栈和队列

### 栈 栈模型 栈(stack)是限制对元素的插入(push)和删除(pop)只能在一个位置上进行的表,该位置是表的末端,叫做栈的栈顶(top). 栈的基本操作只有两种,压入栈(push)和弹出栈顶(pop),且只能作用于栈顶.(只有栈顶元素是可访问的 你可以把栈结构理解成一个底部封闭,顶部打开的桶.最先进去的元素一定是最后才能取出,最晚进去的元素一定是最先取出. 因此栈又叫做LIFO(后进先出,Last In First Out)表. 栈的优势 栈的操作是常数时间的,而且是以非常快的常数时

表、栈和队列

表.栈和队列是最简单和最基本的三种数据结构——<数据结构与算法分析—— C 语言描述> 表 应用范畴: i. 多项式 ADT i. 基数排序(多趟桶式排序) 代码实现: i. 多重表 链表的游标实现 代码实现: 栈 栈又叫做 LIFO(后进先出)表——<数据结构与算法分析—— C 语言描述> 应用范畴: i. 平衡符号 i. 后缀表达式 有中缀表达式 s1 : ((2 + 3)* 8 + 5 + 3)* 6 总能转换成后缀表达式 s2 : 2 3 + 8 * 5 + 3 + 6 *

&lt;数据结构与算法分析 C++描述&gt; 表/栈/队列

这一章主要内容: * 抽象数据类型(ADT)的概念 * 实现表/栈/队列 * 了解这三个数据结构的应用场景 1. ADT ADT: abstract data type, 是抽象的数学模型,在该模型上定义了一系列的操作.使用它的人,不需要了解它的存储方式,只关心它的逻辑特征.可以使用三元组的方法来表示(D,S,P),D是数据对象,S是数据之间的关系,P是对数据的基本操作,具体介绍,可以参考帖子:点击打开链接 2. 表ADT 表的数据自然是单个元素,而元素之间的关系是前驱与后继,操作包括查找/插入

算法系列(六)数据结构之表队列和栈

在http://blog.csdn.net/robertcpp/article/details/51559333一文中,我们讲了排序,这一章来介绍一下基本数据结构:表.队列.栈和它们的简单实现 一.表ADT 1.数组实现顺序表 通过对数组操作,来直接对表进行增删查改操作,这种线性表查找某个位置的元素花费的时间为O(1),但是插入删除元素花费的时间为O(n),如果对表的操作更多的是访问操作,那么选择这种实现更为合适. 下面是一个简单实现 package com.algorithm.list; im

《数据结构与算法分析:C语言描述_原书第二版》CH3表、栈和队列_reading notes

表.栈和队列是最简单和最基本的三种数据结构.基本上,每一个有意义的程序都将明晰地至少使用一种这样的数据结构,比如栈在程序中总是要间接地用到,不管你在程序中是否做了生命. 本章学习重点: 理解抽象数据类型(ADT)的概念 学习如何对表进行有效的操作 熟悉栈ADT及其在实现递归方面的应用 熟悉队列ADT及其在操作系统和算法设计中的应用 ADT 抽象数据类型(abstract data type)是一个操作的集合,是数学的抽象,在ADT中不涉及如何实现操作的集合,这可以看作是模块化设计的扩充. 对于每