资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

java栈的实现代码 java栈怎么写

如何使用java代码实现栈和队列

如何使用java代码实现栈和队列

创新互联建站专注于秦安网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供秦安营销型网站建设,秦安网站制作、秦安网页设计、秦安网站官网定制、小程序定制开发服务,打造秦安网络公司原创品牌,更为您提供秦安网站排名全网营销落地服务。

import java.util.Scanner;

import java.util.Stack;

/**

* @author Owner

*

*/

public class Main {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int n= sc.nextInt();//3条测试数据数据

StackCharacter stack = null;

while(n!=0){

//从控制台读入一个测试字符串[]() [(])

String str = sc.next();

//如果该输入字符串为奇数,说明不匹配

if(str.length() % 2 == 1){

System.out.println("No");

}else{

//说明字符是偶数

stack = new StackCharacter();

//遍历第一条测试字符串[]() [(])

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

if(stack.isEmpty()){

//如果栈是空的

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

}else if(stack.peek() == '[' str.charAt(i) == ']' || stack.peek() == '(' str.charAt(i) == ')'){

//说明此时栈中字符不是空的,并且符合,

stack.pop();

}else{

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

}

}

if(stack.isEmpty()){

//如果栈是空的,说明a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3mhDvP10Ln19hrANbP1fk0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3ErHnLP1nsPHDznHTkn1fYPHnz" target="_blank" class="baidu-highlight"括号/a匹配

System.out.println("Yes");

}else{

//说明栈不为空,a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3mhDvP10Ln19hrANbP1fk0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3ErHnLP1nsPHDznHTkn1fYPHnz" target="_blank" class="baidu-highlight"括号/a不匹配

System.out.println("No");

}

}

n--;

}

}

}

用java编写出来:用数组实现一个栈

public class Stack {

private Object[] stack;

//这个不需要;

//private int top = 0; //初始化栈顶

//这个也不需要;

//写一个栈出来,最好是可以动态的,可以自己改变大小的,即数组的长度;

//private int size = 0; // 初始化大小

//元素个数;

private int size;

//默认长度为10;

public Stack(){

this(10);

}

//也可以自己设置长度,即容量;

public Stack(int len){

stack = new Object[len];

}

//返回元素个数;

public int size(){

return size;

}

//返回数组长度,即容量;

public int capacity(){

return stack.length;

}

//实现动态的数组;

public void ensureCapacity(){

if(size() == capacity()){

Object[] newStack = new Object[size() * 3 / 2 + 1];

System.arraycopy(stack, 0, newStack, 0, size());

stack = newStack;

}

}

//入栈;

public void push(Object o){

size++;

ensureCapacity();

stack[size - 1] = o;

}

/*

public void push(Object object) {

if (isFull()) {

System.out.println("栈满! 入栈失败");

}

stack[top++] = object;

}

*/

//判空;

public boolean isEmpty(){

return size == 0;

}

//出栈;

public Object pop(){

//首先要判空;

if(isEmpty()){

throw new ArrayIndexOutOfBoundsException("不能为空");

}

Object o = stack[--size];

stack[size] = null;

return o;

}

/*

// 出栈

public Object pop() {

Object object = stack[--top];

stack[top] = null;

return object;

}

*/

/*

// 计算栈当前大小

public int size() {

return top;

}

// 判断是否是空栈

public boolean isEmpey() {

return top == 0;

}

// 判断是否栈满

public boolean isFull() {

return top = size;

}

public Stack(int size) {

this.size = size;

}

*/

public static void main(String[] args) {

Stack stack = new Stack(3);

String[] data = new String[] { "a", "b", "c" };

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

stack.push(data[i]);

System.out.println(data[i] + "");

}

System.out.println("***********");

while (!stack.isEmpty()) {

System.out.println(stack.pop() + "");

}

//}

}

}

你自己对比一下,我是在你的里面修改的

用JAVA栈的方法实现十进制转十六进制

看到这道题目想到了三个方法,依次给你列出(栈的方式,递归,数组)

栈的方式:

//思路:将十进制数(number)除以R取余,让取得的余数(number Mod R )进栈,让十进制数变为

number/R,重复上述过程,直到number等于0为止,然后依次从栈中取出数据即为所求,直到栈为空,下面是实现的代码:

#includestdio.h

#includestdlib.h

#define MAX_SIZE 80

typedef struct

{//栈的数据结构,采用数组

char data[MAX_SIZE];

int top;

}stack;

int isfull(stack s)

{//判断栈是否已满

return (++s.top==MAX_SIZE);

}

int isempty(stack s)

{//判断栈为空

return s.top==-1;

}

void push(stack * s,char in_data)

{//进栈

if(isfull(*s))

{

printf("栈已满,不能执行操作!\n");

exit(1);

}

s-data[++s-top]=in_data;

}

void pop(stack *s)

{//出栈

if(isempty(*s))

{

printf("栈已空,不能执行操作!\n");

exit(1);

}

s-top--;

}

char top_value(stack *s)

{//取栈顶元素

if(isempty(*s))

{

printf("栈已空,不能执行操作!\n");

exit(1);

}

return s-data[s-top];

}

int main(int argc,char** argv)

{

int number;

stack result;

result.top=-1;

int r_range;

printf("输入转换的数据和对应的进制:");

scanf("%d%d",number,r_range);

printf("%d对应的%d进制为:",number,r_range);

while(number!=0)

{

char input;

if(number%r_range=10)

input=((number%r_range)-10)+'a';

else

input=((number%r_range)+'0');

push(result,input);

number=number/r_range;

}

while(!isempty(result))

{

putchar(top_value(result));

pop(result);

}

return 0;

}

====================================================================

递归的方式:定义一个输出字符串,让十进制数(number)除以要转换的进制R 若结果不为0,则继续执行前述操作,直到得到除的结果为零,此时number除以R取其余数,将其结果(number Mod R)映射到指定的输出字符数组中下标输出即为结果(描述的不是很好,你看代码吧)

//用这种方法也比较可以

#includestdio.h

void ten_to_any(int number,int range_t)

{//递归实现

char text[]="0123456789abcdef";

int k=number/range_t;

if(k)

ten_to_any(k,range_t);

putchar(text[number%range_t]);

}

int main()

{

int number,r_range;

while(1)

{

printf("\n输入转换的数据,和对应进制:");

scanf("%d%d",number,r_range);

if(r_range16||r_range2)

{

printf("超出了范围!");

break;

}

printf("%d对应的%d进制为:",number,r_range);

ten_to_any(number,r_range);

}

return 0;

}

//采用数组的形式

这是我上次回答别人的

用一个字符串保存转换的结果(str[80])假设十进制数为number,转换的进制为digits,则将numbers%digits(根据余数的情况做相应处理)结果保存在字符串str中,将numbers变为numbers/digits;直到numbers为零。得到的结果为逆序,需要将其倒转,倒转后即为所求。

//-----------c语言实现10进制转2~16进制

#includestdio.h

#includestring.h

void TentoAny(int number,char *str,int digits)

{

int i=0;

if(digits16||digits2)//非2~16进制则直接退出

return ;

while(number)

{

if(number%digits=10)

{

str[i++]='A'+(number%digits-10);

}

else

{

str[i++]=number%digits+'0';

}

}

str[i]='\0';

strrev(str);//strrev函数定义在string.h中的,是对字符串做逆序处理的函数

//这里需要逆序的原因是因为得到的结果为该进制的逆序

}

怎么用java代码实现栈内存?

使用java.util包中的Stack类创建一个栈对象

public Object push(Object data);输入数据,实现压栈

public Object pop();输出数据,实现弹栈

public boolean empty()判空

public Object peek();查看栈顶元素

可以去查查API嘛

我也是学java的,大家一起进步。


网站题目:java栈的实现代码 java栈怎么写
文章出自:http://cdkjz.cn/article/ddcispg.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220