Preface :
A stack is a LIFO storage structure. This makes it deal for a range of applications. Let us look at two such examples. We use a stack to create a string that represents a decimal number in a base between 2 and 16. In this way, a programmer can view a number base-10(decimal) or in other base such as a base-2 (binary) or base-16(hexadecimal). This application is a stack version of the recursive algorithm in Section 6.1.
A second application uses a stack to test whether program source code correctly matches left-right parentheses, brackets and braces ("()", "[]" and "{}"). The technique is used by compilers to verify the balancing of symbol pairs.
Multibase Numbers :
Most programming languages display integer values in decimal as the default format. For some applications, particularly systems programming, you may want to display a number in binary, octal or hexadecimal. A hexadecimal (hex) number consists of digits choose from 0,1...,9,A,B,C,D,E, where the letters represent the values 10 to 15. The letters can be upper or lower case. To provide this ability, we design a method baseString(), which takes an integer value and a base in the range 2-16 as arguments and returns a string with the digits in the specified base. The implementation uses a stack to store the digits. For instance, the number n=75 has the following representations in base 2, 8 and 16 :
An algorithm uses repeated division by the base to describe a nonnegative integer N as a base B number. At each step, the remainder N%B identifies the next digit and the quotient N/B contains the remaining digits that are used for the next step. The process terminates when the quotient is 0. Below figure demonstrates the algorithm process :
The baseString() Algorithm :
The method baseString() takes a positive integer num and a integer b in the range 2<=b<=16. The return value is a string representing the value of num in the specified base b. A stack with Character objects stores the digit characters that are created by repeated divisions. Below is the implementation of the method :
Balancing Symbol Pairs :
A syntactically correct Java program must properly match and nest the symbol pairs "()", "[]" and "{}". You have experience with using matching parentheses for type casting and for creating subexpressions within a larger arithmetic expression. For discussion, we use the term left-symbol to describe a character in the set "(" , "[" and "{". A right-symbol is a character in the set ")", "]" and "}".
A program properly matches and nests the symbol pairs if each right-symbol matches the last unmatched left-symbol and all of the symbols are part of a matching pair. We use a stack to create an algorithm that checks for valid symbol-pair matching. For simplicity, assume the source code is a string. A scan of the string processes only left-symbol and right-symbol characters. In the case of a left-symbol, we store the character on a stack, awaiting the appearance of its right-symbol.
The method checkForBalance() implements the algorithm that determines whether an expression properly nests the symbol pairs. The method is passed a string as an argument and returns a string indicating that the expression is balanced or with an error message indicating an offending symbol. The algorithm scans successive characters in the string and builds the corresponding return string, called msgStr. If the character at the scan location is valid (maintains balance), a blank space is appended to msgStr and the scan continues. If the character is invalid, the algorithm appends the character "^" to the msgStrwhich lines up with the offending character in the expression. It pinpoints the error. After scanning an invalid character, we return from the method withmsgStr as the error message. The process may involve a complete scan of the expression, at which point a final test checks whether the stack is empty and returns with a message indicating a balanced string or an error condition.
In the implementation of checkForBalance(), we catch the expression that occurs when attempting to pop an empty stack. In this case, we have identified a missing left-symbol and can create a return error message. Throughout the method gives only generic error messages such as "Missing left symbol". This allows us to focus on the design of the algorithm. A compiler would generate specific error messages that indicate which type of symbol is missing.
This is a blog to track what I had learned and share knowledge with all who can take advantage of them
標籤
- [ 英文學習 ]
- [ 計算機概論 ]
- [ 深入雲計算 ]
- [ 雜七雜八 ]
- [ Algorithm in Java ]
- [ Data Structures with Java ]
- [ IR Class ]
- [ Java 文章收集 ]
- [ Java 代碼範本 ]
- [ Java 套件 ]
- [ JVM 應用 ]
- [ LFD Note ]
- [ MangoDB ]
- [ Math CC ]
- [ MongoDB ]
- [ MySQL 小學堂 ]
- [ Python 考題 ]
- [ Python 常見問題 ]
- [ Python 範例代碼 ]
- [心得扎記]
- [網路教學]
- [C 常見考題]
- [C 範例代碼]
- [C/C++ 範例代碼]
- [Intro Alg]
- [Java 代碼範本]
- [Java 套件]
- [Linux 小技巧]
- [Linux 小學堂]
- [Linux 命令]
- [ML In Action]
- [ML]
- [MLP]
- [Postgres]
- [Python 學習筆記]
- [Quick Python]
- [Software Engineering]
- [The python tutorial]
- 工具收集
- 設計模式
- 資料結構
- ActiveMQ In Action
- AI
- Algorithm
- Android
- Ansible
- AWS
- Big Data 研究
- C/C++
- C++
- CCDH
- CI/CD
- Coursera
- Database
- DB
- Design Pattern
- Device Driver Programming
- Docker
- Docker 工具
- Docker Practice
- Eclipse
- English Writing
- ExtJS 3.x
- FP
- Fraud Prevention
- FreeBSD
- GCC
- Git
- Git Pro
- GNU
- Golang
- Gradle
- Groovy
- Hadoop
- Hadoop. Hadoop Ecosystem
- Java
- Java Framework
- Java UI
- JavaIDE
- JavaScript
- Jenkins
- JFreeChart
- Kaggle
- Kali/Metasploit
- Keras
- KVM
- Learn Spark
- LeetCode
- Linux
- Lucene
- Math
- ML
- ML Udemy
- Mockito
- MPI
- Nachos
- Network
- NLP
- node js
- OO
- OpenCL
- OpenMP
- OSC
- OSGi
- Pandas
- Perl
- PostgreSQL
- Py DS
- Python
- Python 自製工具
- Python Std Library
- Python tools
- QEMU
- R
- Real Python
- RIA
- RTC
- Ruby
- Ruby Packages
- Scala
- ScalaIA
- SQLAlchemy
- TensorFlow
- Tools
- UML
- Unix
- Verilog
- Vmware
- Windows 技巧
- wxPython
訂閱:
張貼留言 (Atom)
[Git 常見問題] error: The following untracked working tree files would be overwritten by merge
Source From Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 # git clean -d -fx 方案2: 今天在服务器上 gi...
-
前言 : 為什麼程序管理這麼重要呢?這是因為: * 首先,本章一開始就談到的,我們在操作系統時的各項工作其實都是經過某個 PID 來達成的 (包括你的 bash 環境), 因此,能不能進行某項工作,就與該程序的權限有關了。 * 再來,如果您的 Linux 系統是個...
-
屬性 : 系統相關 - 檔案與目錄 語法 : du [參數] [檔案] 參數 | 功能 -a | 顯示目錄中個別檔案的大小 -b | 以bytes為單位顯示 -c | 顯示個別檔案大小與總和 -D | 顯示符號鏈結的來源檔大小 -h | Hum...
-
來源自 這裡 說明 : split 是 Perl 中非常有用的函式之一,它可以將一個字串分割並將之置於陣列中。若無特別的指定,該函式亦使用 RE 與 $_ 變數 語法 : * split /PATTERN/,EXPR,LIMIT * split /...
沒有留言:
張貼留言