Java数据结构_栈
2014-07-29 21:35
686 查看
栈是一种先进后出的数据结构,数组实现栈的操作:
/**
* 基于数组实现栈的操作,访问元素受限,每次只能访问最顶端的元素。
* @author USER
*
*/
class Stack{
private int[] StackArray;
private int top;
private int maxSize;
public Stack(int size) {
maxSize = size;
StackArray = new int[maxSize];
top = -1;
}
//入栈:指针top在插入数据项前递增的
public void push(int value) {
StackArray[++top] = value;
}
//出栈:指针top由最顶端递减
public int pop() {
return StackArray[top--];
}
//查看:只能查看顶端的数据
public int peek() {
return StackArray[top];
}
public boolean isEmpty() {
return (top == -1);
}
public boolean isFull() {
return (top == maxSize-1);
}
}
public class StackApp {
public static void main(String[] args) {
Stack stack = new Stack(10);
stack.push(11);
stack.push(22);
stack.push(33);
stack.push(44);
stack.push(55);
while (!stack.isEmpty()) {
int value = stack.pop();
System.out.print(value+" ");
}
System.out.println();
}
}
栈的应用举例:
1、将输入的字符串逆序排列
/**
* 字符串的逆序排列
*/
import java.util.Scanner;
class Stacks{
private char[] StackArray;
private int top;
private int maxSize;
public Stacks(int size) {
maxSize = size;
StackArray = new char[maxSize];
top = -1;
}
//入栈:指针top在插入数据项前递增的
public void push(char value) {
StackArray[++top] = value;
}
//出栈:指针top由最顶端递减
public char pop() {
return StackArray[top--];
}
//查看:只能查看顶端的数据
public char peek() {
return StackArray[top];
}
public boolean isEmpty() {
return (top == -1);
}
public boolean isFull() {
return (top == maxSize-1);
}
}
class Reverse{
private String input;
private String output;
public Reverse(String in) {
input = in;
}
public String DoReverse() {
int StackSize = input.length();
Stacks stack = new Stacks(StackSize);
for (int i = 0; i < StackSize; i++) {
char ch = input.charAt(i);
stack.push(ch);
}
output = "";
while (!stack.isEmpty()) {
char out = stack.pop();
output = output+out;
}
return output;
}
}
public class WordReverse {
public static void main(String[] args) {
Scanner inputScanner = new Scanner(System.in);
String string = inputScanner.next();
Reverse reverse = new Reverse(string);
String string2 = reverse.DoReverse();
System.out.println("Reversed:"+string2);
}
}
结果如:
djsaghsafdsarewq
Reversed: qwerasdfashgasjd
实际上,字符串逆序排列不用栈操作更简单:
import java.util.Scanner;
public class WordReverse1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String string = input.next();
int size = string.length();
String output = "";
for (int i = size-1; i >= 0; i--) {
char ch = string.charAt(i);
output = output+ch;
}
System.out.print(output);
}
}
/**
* 基于数组实现栈的操作,访问元素受限,每次只能访问最顶端的元素。
* @author USER
*
*/
class Stack{
private int[] StackArray;
private int top;
private int maxSize;
public Stack(int size) {
maxSize = size;
StackArray = new int[maxSize];
top = -1;
}
//入栈:指针top在插入数据项前递增的
public void push(int value) {
StackArray[++top] = value;
}
//出栈:指针top由最顶端递减
public int pop() {
return StackArray[top--];
}
//查看:只能查看顶端的数据
public int peek() {
return StackArray[top];
}
public boolean isEmpty() {
return (top == -1);
}
public boolean isFull() {
return (top == maxSize-1);
}
}
public class StackApp {
public static void main(String[] args) {
Stack stack = new Stack(10);
stack.push(11);
stack.push(22);
stack.push(33);
stack.push(44);
stack.push(55);
while (!stack.isEmpty()) {
int value = stack.pop();
System.out.print(value+" ");
}
System.out.println();
}
}
栈的应用举例:
1、将输入的字符串逆序排列
/**
* 字符串的逆序排列
*/
import java.util.Scanner;
class Stacks{
private char[] StackArray;
private int top;
private int maxSize;
public Stacks(int size) {
maxSize = size;
StackArray = new char[maxSize];
top = -1;
}
//入栈:指针top在插入数据项前递增的
public void push(char value) {
StackArray[++top] = value;
}
//出栈:指针top由最顶端递减
public char pop() {
return StackArray[top--];
}
//查看:只能查看顶端的数据
public char peek() {
return StackArray[top];
}
public boolean isEmpty() {
return (top == -1);
}
public boolean isFull() {
return (top == maxSize-1);
}
}
class Reverse{
private String input;
private String output;
public Reverse(String in) {
input = in;
}
public String DoReverse() {
int StackSize = input.length();
Stacks stack = new Stacks(StackSize);
for (int i = 0; i < StackSize; i++) {
char ch = input.charAt(i);
stack.push(ch);
}
output = "";
while (!stack.isEmpty()) {
char out = stack.pop();
output = output+out;
}
return output;
}
}
public class WordReverse {
public static void main(String[] args) {
Scanner inputScanner = new Scanner(System.in);
String string = inputScanner.next();
Reverse reverse = new Reverse(string);
String string2 = reverse.DoReverse();
System.out.println("Reversed:"+string2);
}
}
结果如:
djsaghsafdsarewq
Reversed: qwerasdfashgasjd
实际上,字符串逆序排列不用栈操作更简单:
import java.util.Scanner;
public class WordReverse1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String string = input.next();
int size = string.length();
String output = "";
for (int i = size-1; i >= 0; i--) {
char ch = string.charAt(i);
output = output+ch;
}
System.out.print(output);
}
}
相关文章推荐
- Java数据结构---基于数组的表
- Java数组与数据结构
- Java中的数据结构
- java的数据结构
- java中常用的数据结构
- Java基础:Util包下常用的数据结构介绍
- java的数据结构
- Java - 编程基础:Java中的数据结构(2)
- 我要点数据结构之JAVA语言描述的题
- 关注Queue:Java 1.5 添加新的数据结构接口
- 多种数据结构的Java实现(精)
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- Java中的数据结构
- [技术天地] Java 常用数据结构深入分析(Vector、ArrayList、List、Map)
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java) (转载)
- 数据结构习作之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java) (技术含量少许)
- 利用java实现数据结构中常用的插入排序和快速排序算法
- 利用java实现数据结构中常用的插入排序和快速排序算法
- 利用java实现数据结构中常用的插入排序和快速排序算法
- Java数组与数据结构