導航:首頁 > 編程語言 > java數組棧

java數組棧

發布時間:2022-05-12 19:21:02

java在存儲數組時棧內存和堆內存的聯系是什麼

先這樣分開寫,方便解釋
int[] a=null;//聲明數組,也是引用
a=new int[5];//分配內存地址。

好了,數組的引用,也就是a,當你在聲明的時候,他會在棧中開辟一個地址空間。也就是第一步
第二步的作用,是在堆中開辟一系統連續的地址,具體的需要根據你的類型還有數組長度。

總結下,也是,數組的引用保存在棧中,同時實例的時候在堆中開辟連續空間,棧中的空間指向堆的首地址。

再稍微說明一下,為什麼我們平常說不new不可以對數組進行操作呢??因為此時堆中沒有分配內存地址。所以你的數據沒有地方存放和操作。

② java常用的幾種數據結構,堆棧,隊列,數組,鏈

下面給你簡單介紹:堆棧,隊列,數組,鏈表

堆棧

採用該結構的集合,對元素的存取有如下的特點:

先進後出(即,存進去的元素,要在後它後面的元素依次取出後,才能取出該元素)。例如,子彈壓進彈夾,先壓進去的子彈在下面,後壓進去的子彈在上面,當開槍時,先彈出上面的子彈,然後才能彈出下面的子彈。

棧的入口、出口的都是棧的頂端位置

壓棧:就是存元素。即,把元素存儲到棧的頂端位置,棧中已有元素依次向棧底方向移動一個位置。

彈棧:就是取元素。即,把棧的頂端位置元素取出,棧中已有元素依次向棧頂方向移動一個位置。

隊列

採用該結構的集合,對元素的存取有如下的特點:

先進先出(即,存進去的元素,要在後它前面的元素依次取出後,才能取出該元素)。例如,安檢。排成一列,每個人依次檢查,只有前面的人全部檢查完畢後,才能排到當前的人進行檢查。隊列的入口、出口各佔一側。

數組

採用該結構的集合,對元素的存取有如下的特點:

查找快:通過索引,可以快速訪問指定位置的元素

增刪慢:

指定索引位置增加元素:需要創建一個新數組,將指定新元素存儲在指定索引位置,再把原數組元素根據索引,復制到新數組對應索引的位置。

鏈表

採用該結構的集合,對元素的存取有如下的特點:

多個節點之間,通過地址進行連接。例如,多個人手拉手,每個人使用自己的右手拉住下個人的左手,依次類推,這樣多個人就連在一起了。

節點:兩個部分:數據域(存儲的數值),指針域(存儲地址)

查找慢:想查找某個元素,需要通過連接的節點,依次向後查找指定元素

增刪快:

增加元素:操作如左圖,只需要修改連接下個元素的地址即可。

刪除元素:操作如右圖,只需要修改連接下個元素的地址即可。

③ java如何用數組來模擬棧的先進後出

import java.util.Arrays;
public class StackTest {
public static void main(String[] args) {
Stack stack = new Stack();
stack.put(1);
stack.put(2);
stack.put(3);
stack.put(4);
stack.show();
System.out.println(stack.push());
System.out.println(stack.push());
System.out.println(stack.push());
System.out.println(stack.push());
}
}
class Stack{
private int index;
private int length = 3;
private int[] stack;
public Stack() {
stack= new int[length];
index = 0;
}
public void put(int i){
if(index <= length -1){
stack[index++] = i;
} else {
System.out.println("Stack 已滿");
}
}
public int push(){
if (index >0){
return stack[--index];
}else {
System.out.print("Stack 已空");
return -1;
}
}
public void show() {
System.out.println(Arrays.toString(stack));
}
}

④ java堆棧是什麼意思

簡單的說:Java把內存劃分成兩種:一種是棧內存,一種是堆內存。

在函數中定義的一些基本類型的變數和對象的引用變數都在函數的棧內存中分配。當在一段代碼塊定義一個變數時,Java就在棧中為這個變數分配內存空間,當超過變數的作用域後,Java會自動釋放掉為該變數所分配的內存空間,該內存空間可以立即被另作他用。

堆內存用來存放由new創建的對象和數組。在堆中分配的內存,由Java虛擬機的自動垃圾回收器來管理。在堆中產生了一個數組或對象後,還可以在棧中定義一個特殊的變數,讓棧中這個變數的取值等於數組或對象在堆內存中的首地址,棧中的這個變數就成了數組或對象的引用變數。引用變數就相當於是為數組或對象起的一個名稱,以後就可以在程序中使用棧中的引用變數來訪問堆中的數組或對象

⑤ 用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.array(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 ("不能為空");
}

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中的數組存在哪

數組在堆內存。引用是在棧。
因為數組是一個引用類型。所以傳遞進去的是它們的引用,故在方法中互換了它們的值,也必然影響到它們原來的值.

⑦ java 新手 數據結構中 數組 ,棧 ,隊列, 鏈表, 樹 ,圖 , 堆, 散列表 他們之間存在那種關系啊

他們都是一種存儲數據的方式而已,打個比方,你坐地鐵1號線上班和2號線上班,都能上班只是路線不一樣,他們都是存儲數據的格式,每種數據結構有自己的特點,使用哪種數據格式需要根據具體的需求來選,比如你現在需要有序的存儲一組數據而且還要經常的查詢數據,那麼數組就是最合適的,他有角標可以很容易進行排序和查詢!如果有序但是經常增刪數據,那麼鏈表就是最合適的,他的增刪很快,但是查詢差。每種數據結構有各自的適用條件,根據需求來選擇具體的數據結構,時間久了不需要記憶你都會用了

閱讀全文

與java數組棧相關的資料

熱點內容
手機號碼如何加密 瀏覽:424
沈陽程序員培訓學校 瀏覽:538
一般伺服器如何配置 瀏覽:895
圖片怎樣加密發郵件 瀏覽:619
萬虹電腦文件夾密碼忘記了怎麼辦 瀏覽:631
rc108單片機 瀏覽:867
戰雷如何改變伺服器 瀏覽:674
mactelnet命令 瀏覽:51
壓縮袋壓縮了拿出來 瀏覽:401
安卓手機相機怎麼設置許可權 瀏覽:121
美女程序員轉行做主播 瀏覽:671
辦理解壓房產 瀏覽:575
道路工程概論pdf 瀏覽:388
超棒數學速演算法大全 瀏覽:937
小米易語言登錄源碼 瀏覽:31
磚牆內加密鋼筋 瀏覽:992
鄉關何處pdf 瀏覽:84
小豬領贊小程序源碼 瀏覽:336
python曲線如何原路返回 瀏覽:431
pdf快速看圖破解版 瀏覽:294