Java数据结构之栈的线性结构详解

网友投稿 285 2022-12-21

Java数据结构之栈的线性结构详解

目录一:栈二:栈的实现三:栈的测试四:栈的应用(回文序列的判断)总结

一:栈

栈是限制插入和删除只能在一个位置上进行的表,此位置就是表的末端,叫作栈顶。

栈的基本操作分为push(入栈) 和 pop(出栈),前者相当于插入元素到表的末端(栈顶),后者相当于删除栈顶的元素。

二:栈的实现

public class LinearStack {

/**

* 栈的初始默认大小为10

*/

private int size = 5;

/**

* 指向栈顶的数组下标

*/

int top = -1;

/**

* 定义栈stack

*/

private int[] stack;

public LinearStack() {

stack = new int[size];

}

/**

* 判断栈满

*/

public boolean isFull() {

boolean result = false;

if(top == size - 1) {

result = true;

}

return result;

}

/**

* 入栈操作push

*/

public void push(int value) {

/**

* 如果栈满,拓展栈的容量

*/

if(isFull())

stack = expansionStack();

top++;

stack[top] = value;

}

/**

* 出栈操作

*/

public int pop() {

if(top == -1)

throw new RuntimeException("栈空!出栈失败");

int result = stack[top] ;

top--;

return result;

}

/**

* 扩充容量

*/

public int[] expansionhttp://Stack() {

size = size + 10;

int[] stackTemp = new int[size];

for (int i = 0; i < stack.length; i++) {

stackTemp[i] = stack[i];

}

return stackTemp;

}

/**

* 获取栈顶的元素

*/

public int getTop() {

return stack[top];

}

/**

* 显示栈中的全部元素

*/

public String toString() {

String str = "[";

for (int i = 0; i <= top; i++) {

if(i == top)

str = str + stack[i] + "]";

else

str = str + stack[i] + ",";

}

return str;

}

}

三:栈的测试

public class LinearStackTest {

public static void main(String[] args) {

LinearStack linearStack = new LinearStack();

/**

* 元素入栈

http:// */

linearStack.push(1);

linearStack.push(2);

linearStack.push(3);

linearStack.push(4);

linearStack.push(5);

/**

* 栈满,显示栈中所有元素

*/

System.out.println("0:arrayStack " + linearStack.toString());

/**

* 再次入栈

*/

linearStack.push(6);

/**

* 再次显示占中的所有元素

*/

System.out.println("1:arrayStack: " + linearStack.toString());

/**

* 获取栈顶元素

*/

System.out.println("获取栈顶元素:stack[top] = " + linearStack.getTop()+" top = " + linearStack.top);

/**

* 出栈

*/

System.out.println("出栈:stack[top] = " + linearStack.pop()+" top = " + linearStack.top);

/**

* 再次显示栈中的元素

*/

System.out.println("2:arrayStack: " + linearStack.toString());

}

}

四:栈的应用(回文序列的判断)

public class LinearStackChar {

private int size = 5;

/**

* 指向栈顶的数组下标

*/

int top = -1;

/**

* 定义栈stack

*/

private char[] stack;

public LinearStackChar() {

stack = new char[size];

}

/**

* 判断栈满

*/

public boolean isFull() {

boolean result = false;

if(top == size - 1) {

result = true;

}

return result;

}

/**

* 入栈操作push

*/

public void push(char value) {

/**

* 如果栈满,拓展栈的容量

*/

if(isFull())

stack = expansionStack();

top++;

stack[top] = value;

}

/**

* 出栈操作

*/

public char pop() {

if(top == -1)

throw new RuntimeException("栈空!出栈失败");

char result = stack[top] ;

top--;

return result;

}

/**

* 扩充容量

*/

public char[] expansionStack() {

size = size + 10;

char[] stackTemp = new char[size];

for (int i = 0; i < stack.length; i++) {

stackTemp[i] = stack[i];

}

return stackTemp;

}

/**

* 获取栈顶的元素

*/

public char getTop() {

return stack[top];

}

/**

* 显示栈中的全部元素

*/

public String toString() {

String str = "[";

for (int i = 0; i <= top; i++) {

if(i == top)

str = str + stack[i] + "]";

else

str = str + stack[i] + ",";

}

return str;

}

}

public class LinearStackCharTest {

public static void main(String[] args) {

/**

* 判断一个字符串abcba是不是回文序列?

* 思路:将字符串切割成为单个字符,存放在字符栈中;

* 然后出栈,判断出栈后字符数组组成的字符串是否和原字符串相等;

* 相等--回文序列

* 不相等--不是回文序列

*/

String str = "abcba";

LinearStackChar linearStackChar = new LinearStackChar();

//讲字符串切割,存放在栈中

for (int i = 0; i < str.length(); i++) {

linearStackChar.push(str.charAt(i));

}

//存放完成,显示栈中的元素

System.out.println("stack = " + linearStackChar.toString());

//出栈

String result = "";

int length = linearStackChar.top;

System.out.println("top = " + length);

for (int i = 0; i ODnCqfFx<= length; i++) {

result = result + String.valueOf(linearStackChar.pop());

}

//出栈组成的字符串

System.out.println("result = " + result);

//判断是否相等

System.out.println("result = abcba? " + (result.equals("abcba") ? true : false));

}

}

总结

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:高新兴机器人获5000万A轮融资,高新兴机器深耕巡逻机器人
下一篇:一篇文章带你了解java泛型
相关文章

 发表评论

暂时没有评论,来抢沙发吧~