자바에서 배열 크기는 항상 고정 길이이지만 런타임 자체에서 배열 크기를 동적으로 늘릴 수있는 방법이 있습니다.
이것이 가장 "사용되는"방법이자 선호하는 방법입니다.
int temp[]=new int[stck.length+1];
for(int i=0;i<stck.length;i++)temp[i]=stck[i];
stck=temp;
위의 코드에서 우리는 새로운 temp [] 배열을 초기화하고, 추가로 for 루프를 사용하여 원래 배열의 내용으로 temp의 내용을 초기화합니다. stck []. 그런 다음 다시 원본에 다시 복사하여 새로운 크기의 새로운 배열을 제공합니다.
반복적으로 for 루프를 사용하여 어레이를 다시 초기화하기 때문에 CPU 오버 헤드가 발생합니다. 그러나 코드에서 계속 사용하고 구현할 수 있습니다. 데이터를 가변 길이의 메모리에 동적으로 저장하려면 배열 대신 "연결된 목록"을 사용하는 것이 가장 좋습니다.
다음은 런타임에 배열 크기를 늘리기위한 동적 스택을 기반으로 한 실시간 예제입니다.
파일 이름 : DStack.java
public class DStack {
private int stck[];
int tos;
void Init_Stck(int size) {
stck=new int[size];
tos=-1;
}
int Change_Stck(int size){
return stck[size];
}
public void push(int item){
if(tos==stck.length-1){
int temp[]=new int[stck.length+1];
for(int i=0;i<stck.length;i++)temp[i]=stck[i];
stck=temp;
stck[++tos]=item;
}
else
stck[++tos]=item;
}
public int pop(){
if(tos<0){
System.out.println("Stack Underflow");
return 0;
}
else return stck[tos--];
}
public void display(){
for(int x=0;x<stck.length;x++){
System.out.print(stck[x]+" ");
}
System.out.println();
}
}
파일 이름 : Exec.java
(메인 클래스 포함)
import java.util.*;
public class Exec {
private static Scanner in;
public static void main(String[] args) {
in = new Scanner(System.in);
int option,item,i=1;
DStack obj=new DStack();
obj.Init_Stck(1);
do{
System.out.println();
System.out.println("--MENU--");
System.out.println("1. Push a Value in The Stack");
System.out.println("2. Pop a Value from the Stack");
System.out.println("3. Display Stack");
System.out.println("4. Exit");
option=in.nextInt();
switch(option){
case 1:
System.out.println("Enter the Value to be Pushed");
item=in.nextInt();
obj.push(item);
break;
case 2:
System.out.println("Popped Item: "+obj.pop());
obj.Change_Stck(obj.tos);
break;
case 3:
System.out.println("Displaying...");
obj.display();
break;
case 4:
System.out.println("Exiting...");
i=0;
break;
default:
System.out.println("Enter a Valid Value");
}
}while(i==1);
}
}
이것이 귀하의 쿼리를 해결하기를 바랍니다.