如何使用java代碼實現(xiàn)棧和隊列
創(chuàng)新互聯(lián)建站專注于秦安網(wǎng)站建設(shè)服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供秦安營銷型網(wǎng)站建設(shè),秦安網(wǎng)站制作、秦安網(wǎng)頁設(shè)計、秦安網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務,打造秦安網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供秦安網(wǎng)站排名全網(wǎng)營銷落地服務。
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條測試數(shù)據(jù)數(shù)據(jù)
StackCharacter stack = null;
while(n!=0){
//從控制臺讀入一個測試字符串[]() [(])
String str = sc.next();
//如果該輸入字符串為奇數(shù),說明不匹配
if(str.length() % 2 == 1){
System.out.println("No");
}else{
//說明字符是偶數(shù)
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--;
}
}
}
public class Stack {
private Object[] stack;
//這個不需要;
//private int top = 0; //初始化棧頂
//這個也不需要;
//寫一個棧出來,最好是可以動態(tài)的,可以自己改變大小的,即數(shù)組的長度;
//private int size = 0; // 初始化大小
//元素個數(shù);
private int size;
//默認長度為10;
public Stack(){
this(10);
}
//也可以自己設(shè)置長度,即容量;
public Stack(int len){
stack = new Object[len];
}
//返回元素個數(shù);
public int size(){
return size;
}
//返回數(shù)組長度,即容量;
public int capacity(){
return stack.length;
}
//實現(xiàn)動態(tài)的數(shù)組;
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() + "");
}
//}
}
}
你自己對比一下,我是在你的里面修改的
看到這道題目想到了三個方法,依次給你列出(棧的方式,遞歸,數(shù)組)
棧的方式:
//思路:將十進制數(shù)(number)除以R取余,讓取得的余數(shù)(number Mod R )進棧,讓十進制數(shù)變?yōu)?/p>
number/R,重復上述過程,直到number等于0為止,然后依次從棧中取出數(shù)據(jù)即為所求,直到棧為空,下面是實現(xiàn)的代碼:
#includestdio.h
#includestdlib.h
#define MAX_SIZE 80
typedef struct
{//棧的數(shù)據(jù)結(jié)構(gòu),采用數(shù)組
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("棧已滿,不能執(zhí)行操作!\n");
exit(1);
}
s-data[++s-top]=in_data;
}
void pop(stack *s)
{//出棧
if(isempty(*s))
{
printf("棧已空,不能執(zhí)行操作!\n");
exit(1);
}
s-top--;
}
char top_value(stack *s)
{//取棧頂元素
if(isempty(*s))
{
printf("棧已空,不能執(zhí)行操作!\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("輸入轉(zhuǎn)換的數(shù)據(jù)和對應的進制:");
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;
}
====================================================================
遞歸的方式:定義一個輸出字符串,讓十進制數(shù)(number)除以要轉(zhuǎn)換的進制R 若結(jié)果不為0,則繼續(xù)執(zhí)行前述操作,直到得到除的結(jié)果為零,此時number除以R取其余數(shù),將其結(jié)果(number Mod R)映射到指定的輸出字符數(shù)組中下標輸出即為結(jié)果(描述的不是很好,你看代碼吧)
//用這種方法也比較可以
#includestdio.h
void ten_to_any(int number,int range_t)
{//遞歸實現(xiàn)
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輸入轉(zhuǎn)換的數(shù)據(jù),和對應進制:");
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;
}
//采用數(shù)組的形式
這是我上次回答別人的
用一個字符串保存轉(zhuǎn)換的結(jié)果(str[80])假設(shè)十進制數(shù)為number,轉(zhuǎn)換的進制為digits,則將numbers%digits(根據(jù)余數(shù)的情況做相應處理)結(jié)果保存在字符串str中,將numbers變?yōu)閚umbers/digits;直到numbers為零。得到的結(jié)果為逆序,需要將其倒轉(zhuǎn),倒轉(zhuǎn)后即為所求。
//-----------c語言實現(xiàn)10進制轉(zhuǎn)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函數(shù)定義在string.h中的,是對字符串做逆序處理的函數(shù)
//這里需要逆序的原因是因為得到的結(jié)果為該進制的逆序
}
使用java.util包中的Stack類創(chuàng)建一個棧對象
public Object push(Object data);輸入數(shù)據(jù),實現(xiàn)壓棧
public Object pop();輸出數(shù)據(jù),實現(xiàn)彈棧
public boolean empty()判空
public Object peek();查看棧頂元素
可以去查查API嘛
我也是學java的,大家一起進步。
網(wǎng)頁名稱:java棧的實現(xiàn)代碼 java棧怎么寫
本文URL:http://muchs.cn/article36/ddcispg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、虛擬主機、Google、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)