隨筆:20 文章:1 評論:8 引用:0
╰⊙д⊙╯。oо○
面朝大海·春暖花開
BlogJava
首頁
發新隨筆
發新文章
聯系
聚合
管理
『第四章』棧的應用:單詞逆序&分隔符匹配
輸入字符串,然后按照逆序輸出:
//
reverse.java
//
stack used to reverse a string
//
to run this program: C>java ReverseApp
import
java.io.
*
;
//
for I/O
////////////////////////////////////////////////////////////////
class
StackX
{
private
int
maxSize;
private
char
[] stackArray;
private
int
top;
//
--------------------------------------------------------------
public
StackX(
int
max)
//
constructor
{
maxSize
=
max;
stackArray
=
new
char
[maxSize];
top
=
-
1
;
}
//
--------------------------------------------------------------
public
void
push(
char
j)
//
put item on top of stack
{
stackArray[
++
top]
=
j;
}
//
--------------------------------------------------------------
public
char
pop()
//
take item from top of stack
{
return
stackArray[top
--
];
}
//
--------------------------------------------------------------
public
char
peek()
//
peek at top of stack
{
return
stackArray[top];
}
//
--------------------------------------------------------------
public
boolean
isEmpty()
//
true if stack is empty
{
return
(top
==
-
1
);
}
//
--------------------------------------------------------------
}
//
end class StackX
////////////////////////////////////////////////////////////////
class
Reverser
{
private
String input;
//
input string
private
String output;
//
output string
//
--------------------------------------------------------------
public
Reverser(String in)
//
constructor
{ input
=
in; }
//
--------------------------------------------------------------
public
String doRev()
//
reverse the string
{
int
stackSize
=
input.length();
//
get max stack size
StackX theStack
=
new
StackX(stackSize);
//
make stack
for
(
int
j
=
0
; j
<
input.length(); j
++
)
{
char
ch
=
input.charAt(j);
//
get a char from input
theStack.push(ch);
//
push it
}
output
=
""
;
while
(
!
theStack.isEmpty() )
{
char
ch
=
theStack.pop();
//
pop a char,
output
=
output
+
ch;
//
append to output
}
return
output;
}
//
end doRev()
//
--------------------------------------------------------------
}
//
end class Reverser
////////////////////////////////////////////////////////////////
class
ReverseApp
{
public
static
void
main(String[] args)
throws
IOException
{
String input, output;
while
(
true
)
{
System.out.print(
"
Enter a string:
"
);
System.out.flush();
input
=
getString();
//
read a string from kbd
if
( input.equals(
""
) )
//
quit if [Enter]
break
;
//
make a Reverser
Reverser theReverser
=
new
Reverser(input);
output
=
theReverser.doRev();
//
use it
System.out.println(
"
Reversed:
"
+
output);
}
//
end while
}
//
end main()
//
--------------------------------------------------------------
public
static
String getString()
throws
IOException
{
InputStreamReader isr
=
new
InputStreamReader(System.in);
BufferedReader br
=
new
BufferedReader(isr);
String s
=
br.readLine();
return
s;
}
//
--------------------------------------------------------------
}
//
end class ReverseApp
////////////////////////////////////////////////////////////////
分隔符匹配:只有( )和[ ],如果輸入的表達式錯誤,會顯示不匹配的位置
//
brackets.java
//
stacks used to check matching brackets
//
to run this program: C>java bracketsApp
import
java.io.
*
;
//
for I/O
////////////////////////////////////////////////////////////////
class
StackX
{
private
int
maxSize;
private
char
[] stackArray;
private
int
top;
//
--------------------------------------------------------------
public
StackX(
int
s)
//
constructor
{
maxSize
=
s;
stackArray
=
new
char
[maxSize];
top
=
-
1
;
}
//
--------------------------------------------------------------
public
void
push(
char
j)
//
put item on top of stack
{
stackArray[
++
top]
=
j;
}
//
--------------------------------------------------------------
public
char
pop()
//
take item from top of stack
{
return
stackArray[top
--
];
}
//
--------------------------------------------------------------
public
char
peek()
//
peek at top of stack
{
return
stackArray[top];
}
//
--------------------------------------------------------------
public
boolean
isEmpty()
//
true if stack is empty
{
return
(top
==
-
1
);
}
//
--------------------------------------------------------------
}
//
end class StackX
////////////////////////////////////////////////////////////////
class
BracketChecker
{
private
String input;
//
input string
//
--------------------------------------------------------------
public
BracketChecker(String in)
//
constructor
{ input
=
in; }
//
--------------------------------------------------------------
public
void
check()
{
int
stackSize
=
input.length();
//
get max stack size
StackX theStack
=
new
StackX(stackSize);
//
make stack
for
(
int
j
=
0
; j
<
input.length(); j
++
)
//
get chars in turn
{
char
ch
=
input.charAt(j);
//
get char
switch
(ch)
{
case
'
{
'
:
//
opening symbols
case
'
[
'
:
case
'
(
'
:
theStack.push(ch);
//
push them
break
;
case
'
}
'
:
//
closing symbols
case
'
]
'
:
case
'
)
'
:
if
(
!
theStack.isEmpty() )
//
if stack not empty,
{
char
chx
=
theStack.pop();
//
pop and check
if
( (ch
==
'
}
'
&&
chx
!=
'
{
'
)
||
(ch
==
'
]
'
&&
chx
!=
'
[
'
)
||
(ch
==
'
)
'
&&
chx
!=
'
(
'
) )
System.out.println(
"
Error:
"
+
ch
+
"
at
"
+
j);
}
else
//
prematurely empty
System.out.println(
"
Error:
"
+
ch
+
"
at
"
+
j);
break
;
default
:
//
no action on other characters
break
;
}
//
end switch
}
//
end for
//
at this point, all characters have been processed
if
(
!
theStack.isEmpty() )
System.out.println(
"
Error: missing right delimiter
"
);
}
//
end check()
//
--------------------------------------------------------------
}
//
end class BracketChecker
////////////////////////////////////////////////////////////////
class
BracketsApp
{
public
static
void
main(String[] args)
throws
IOException
{
String input;
while
(
true
)
{
System.out.print(
"
Enter string containing delimiters:
"
);
System.out.flush();
input
=
getString();
//
read a string from kbd
if
( input.equals(
""
) )
//
quit if [Enter]
break
;
//
make a BracketChecker
BracketChecker theChecker
=
new
BracketChecker(input);
theChecker.check();
//
check brackets
}
//
end while
}
//
end main()
//
--------------------------------------------------------------
public
static
String getString()
throws
IOException
{
InputStreamReader isr
=
new
InputStreamReader(System.in);
BufferedReader br
=
new
BufferedReader(isr);
String s
=
br.readLine();
return
s;
}
//
--------------------------------------------------------------
}
//
end class BracketsApp
////////////////////////////////////////////////////////////////
發表于 2008-04-26 11:18
dreamingnest
閱讀(421)
評論(0)
編輯
收藏
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
CALENDER
<
2008年4月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
常用鏈接
我的隨筆
我的文章
我的評論
我的參與
最新評論
留言簿
(1)
給我留言
查看公開留言
查看私人留言
隨筆分類
(13)
應用程序(4)
(rss)
數據結構(java)
(rss)
算法程序總結(2)
(rss)
鏈表和棧(結)(7)
(rss)
隨筆檔案
(21)
2008年10月 (1)
2008年5月 (7)
2008年4月 (13)
外面的世界
懶散狂徒的專欄(天行健,君子以自強不息 地勢坤,君子以厚德載物)
(rss)
這里的朋友
保爾任(思想比知識更重要 成長比成功更重要)
搜索
最新評論
1.?re: BFS和DFS兩種方法獲取指定目錄下的所有目錄和文件
學習了
--fejay
2.?re: 關于螞蟻問題(Ants)
實際過程可以這么進行抽象模擬:
序列中的元素帶有方向,進行負值部分移動到負值區域,正值部分移動到正值區域時就不再發生碰撞,此時絕對值最小的值決定剩余爬行時間
--zdh
3.?re: 關于螞蟻問題(Ants)
這個問題看到實質就很簡單,所有的螞蟻都是相同的螞蟻,因此可以看成所有的螞蟻都可以穿過對面爬過來的螞蟻就ok啦,最長時間就是兩端的螞蟻向另一端爬出去,最短的就是兩端的四個螞蟻向所在端爬出:)
--zdh
4.?re: 關于螞蟻問題(Ants)
評論內容較長,點擊標題查看
--blues
5.?re: 關于螞蟻問題(Ants)
評論內容較長,點擊標題查看
--dreamingnest
閱讀排行榜
1.?關于螞蟻問題(Ants)(2242)
2.?通過排序總結java泛型數組列表(1649)
3.?堆棧解(非遞歸)決迷宮問題(1414)
4.?ACM中使用JAVA的介紹(1048)
5.?~·掃雷小游戲·~(1035)
評論排行榜
1.?關于螞蟻問題(Ants)(7)
2.?BFS和DFS兩種方法獲取指定目錄下的所有目錄和文件(1)
3.?一著名軟件公司的java筆試算法題的答案 (0)
4.?堆棧解(非遞歸)決迷宮問題(0)
5.?堆排序代碼(0)
Powered By:
博客園
模板提供
:
滬江博客
主站蜘蛛池模板:
最近免费中文字幕大全高清大全1
|
亚洲久本草在线中文字幕
|
一级毛片成人免费看a
|
亚洲精品乱码久久久久久
|
亚洲免费在线视频播放
|
亚洲成AV人片在
|
久久免费观看视频
|
亚洲午夜无码片在线观看影院猛
|
国产免费无码AV片在线观看不卡
|
亚洲色欲色欲www
|
亚洲网站免费观看
|
男女猛烈无遮掩视频免费软件
|
亚洲大尺度无码无码专区
|
成人最新午夜免费视频
|
亚洲精品黄色视频在线观看免费资源
|
99亚偷拍自图区亚洲
|
性做久久久久久久免费看
|
亚洲人成7777
|
亚洲欧洲美洲无码精品VA
|
a毛片在线免费观看
|
久久精品视频亚洲
|
国产精品四虎在线观看免费
|
久草视频在线免费看
|
337p日本欧洲亚洲大胆精品555588
|
免费看的黄色大片
|
鲁啊鲁在线视频免费播放
|
精品国产亚洲一区二区在线观看
|
99视频全部免费精品全部四虎
|
久久一区二区三区免费
|
亚洲日韩精品A∨片无码加勒比
|
亚洲AV乱码久久精品蜜桃
|
亚洲国产香蕉人人爽成AV片久久
|
手机在线看永久av片免费
|
无码国产精品一区二区免费3p
|
少妇亚洲免费精品
|
亚洲人成网站在线观看播放
|
四虎影视在线永久免费看黄
|
baoyu122.永久免费视频
|
美女被免费网站在线视频免费
|
亚洲综合激情五月丁香六月
|
亚洲第一页在线播放
|