導航:首頁 > 編程語言 > 用java寫一個棧

用java寫一個棧

發布時間:2024-04-17 13:31:28

1. 我要用java實現一個棧,基本操作就是出棧入棧。請問如何實現效率比較高。

//這是JDK提供的棧

import java.util.Stack;

public class UsingStack {
public static void main(String[] args) {
//構造棧對象,使用類型限制,只能存儲Integer數據
Stack<Integer> s = new Stack<Integer>();

//1、2、3依次入棧
s.push(1);
s.push(2);
s.push(3);

//3、2、1依次出棧
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
}
}

//這是我寫的順序結構的棧
import java.util.EmptyStackException;
import java.util.Vector;

public class UsingStack{
public static void main(String[] args){
//構造棧對象,使用類型限制,只能存儲Integer數據
MyStack<Integer> s = new MyStack<Integer>();

//1、2、3依次入棧
s.push(1);
s.push(2);
s.push(3);

//3、2、1依次出棧
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
}
}

/**
* 棧類
* @author developer_05
* @param <T>
*/
class MyStack<T> extends Vector<T>{
/**
* 構造方法
*/
public MyStack(){
}

/**
* 入棧方法
* @param item 待入棧的元素
* @return 返回入棧的元素
*/
public T push(T item) {
addElement(item);

return item;
}

/**
* 出棧方法(同步處理)
* @return 返回出棧元素
*/
public synchronized T pop() {
T obj;
int len = size();

if (len == 0)
throw new EmptyStackException();
obj = elementAt(len - 1);

removeElementAt(len - 1);

return obj;
}

/**
* 判斷棧是否為空的方法
* @return 返回true(棧空)或false(棧非空)
*/
public boolean empty() {
return size() == 0;
}

private static final long serialVersionUID = 1L;
}

2. 用java編寫出來:用數組實現一個棧

} } 使用java中Stack類.跟數據結構中的棧是一個意思。 不用Stack,直接new一個長度為10的數組就可以了

3. java 創建棧問題

1.如果我要調用來棧的操作是不源是只要在開頭
import java.util.*;
就可以了。
具體來說是導入import java.util.Stack;就可以了。
2.怎樣用stack創建一個存放整型棧和存放字元的棧?
Stack<Integer> s = new Stack<Integer>(); 只能裝整形的棧
Stack<Character> s = new Stack<Character>(); 只能裝字元型的棧
3.棧用完後怎麼銷毀?
關於銷毀的問題,自己不用手動銷毀,java有自動回收機制會自動回收沒用的棧

4. JAVA編程實現堆棧出棧操作!

數組實現的堆棧:ArrayStack.java
public class ArrayStack {
Object[] m_elements;
int m_size;

public ArrayStack(int len) {
m_elements = new Object[len];
m_size = 0;
}

public ArrayStack() {
this(50);
}

// insert onto stack
public void push(Object element) {
m_elements[m_size] = element;
m_size++;
}

// return and remove the top element
public Object pop() {
if (!this.isEmpty()) {
Object obj = m_elements[m_size - 1];
m_elements[m_size - 1] = null;
m_size--;

return obj;
} else {
return null;
}
}

// return the top element
public Object top() {
if (!this.isEmpty()) {
return m_elements[m_size - 1];
} else {
return null;
}
}

// return 1 --> is empty
// return 0 --> is not empty
public boolean isEmpty() {
return this.size() == 0;
}

public int size() {
return m_size;
}
}

使用鏈表實現(單鏈表) :
public class Stacklist {
Node m_header;

int m_size;

public ListStack() {
m_header = null;
m_size = 0;
}

public void push(Object value) {

m_header = new Node(value, m_header);

}

public Object pop() {
if (!this.isEmpty()) {
throw new RuntimeException("Stack underflow");
}

Object obj = m_header.element;

m_header = m_header.next;

return obj;
}

// return reference to most recently added elemenet
public Object peek() {
if (!this.isEmpty()) {
throw new RuntimeException("Stack underflow");
}

return m_header.element;
}

public boolean isEmpty() {
return this.size() == 0;
}

//return the number of the queue's elements;
public int size() {
return m_size;
}
}

鏈表的需要用到一個結點類 Node.java 代碼如下
public class Node {
Object element;
Node next;

public Node(Object theElement) {
this(theElement, null);
}

public Node(Object theElement, Node n) {
element = theElement;
next = n;
}

public Object getElement() {
return element;
}

public void setElement(Object element) {
this.element = element;
}

public Node getNext() {
return next;
}

public void setNext(Node next) {
this.next = next;
}
}

5. 用java編一個棧的插入刪除和一個隊列的插入刪除 急

給你個棧的例子 後進先出
隊列稍微改一下就行 先進先內出
class MyStack {

private int[] data;
private int top;//棧頂指針容

public MyStack(){
this(10);
}
public MyStack(int size){
this.data=new int[size];
this.top=0;
}
//入棧
public boolean push(int element){
if(top<this.data.length){
this.data[top++]=element;
return true;
}
return false;
}
//出棧
public int pop(){
if(top>0){
return data[--top];
}
return -1;
}

6. 1. 鐢–++鎴朖ava鍐欎竴涓鍏充簬鍫嗘爤鐨勭被鎻忚堪錛屽苟涓哄爢鏍堢殑鍘嬫爤錛坧ush錛夊拰鍑烘爤錛坧op錛夋搷浣滅紪鍐欐柟娉

#include<iostream.h>
using namespace std;
const int MAX=5; //鍋囧畾鏍堜腑鏈澶氫繚瀛5涓鏁版嵁
//瀹氫箟鍚嶄負stack鐨勭被錛屽叾鍏鋒湁鏍堝姛鑳
class stack {
//鏁版嵁鎴愬憳
float num[MAX]; //瀛樻斁鏍堟暟鎹鐨勬暟緇
int top; //鎸囩ず鏍堥《浣嶇疆鐨勫彉閲
public:
//鎴愬憳鍑芥暟
void init(void) { top=0; } //鍒濆嬪寲鍑芥暟
void push(float x) //鍏ユ爤鍑芥暟
{
if (top==MAX){
cout<<"Stack is full !"<<endl;
return;
};
num[top]=x;
top++;
}
float pop(void) //鍑烘爤鍑芥暟
{
top--;
if (top<0){
cout<<"Stack is underflow !"<<endl;
return 0;
};
return num[top];
}
}
//浠ヤ笅鏄痬ain()鍑芥暟錛屽叾鐢╯tack綾誨壋寤烘爤瀵硅薄錛屽苟浣跨敤浜嗚繖浜涘硅薄
main(void)
{
//澹版槑鍙橀噺鍜屽硅薄
int i;
float x;
stack a,b; //澹版槑(鍒涘緩)鏍堝硅薄
//浠ヤ笅瀵規爤瀵硅薄鍒濆嬪寲
a.init();
b.init();
//浠ヤ笅鍒╃敤寰鐜鍜宲ush()鎴愬憳鍑芥暟灝2,4,6,8,10渚濇″叆a鏍堝硅薄
for (i=1; i<=MAX; i++)
a.push(2*i);
//浠ヤ笅鍒╃敤寰鐜鍜宲op()鎴愬憳鍑芥暟渚濇″脊鍑篴鏍堜腑鐨勬暟鎹騫舵樉紺
for (i=1; i<=MAX; i++)
cout<<a.pop()<<" ";
cout<<endl;
//浠ヤ笅鍒╃敤寰鐜鍜宲ush()鎴愬憳鍑芥暟灝嗛敭鐩樿緭鍏ョ殑鏁版嵁渚濇″叆b鏍
cout<<"Please input five numbers."<<endl;
for (i=1; i<=MAX; i++) {
cin>>x;
b.push(x);
}
//浠ヤ笅鍒╃敤寰鐜鍜宲op()鎴愬憳鍑芥暟渚濇″脊鍑篵鏍堜腑鐨勬暟鎹騫舵樉紺
for (i=1; i<=MAX; i++)
cout<<b.pop()<<" ";
}

閱讀全文

與用java寫一個棧相關的資料

熱點內容
如何免費帶格式的文件 瀏覽:729
外星人和蘋果哪個貴 瀏覽:880
小程序網址 瀏覽:285
qq裡面的文件怎麼刪除 瀏覽:908
aspnet資料庫操作 瀏覽:378
電子編程在哪裡下載 瀏覽:682
核桃編程如何新建目標文件夾 瀏覽:348
移動網路架構 瀏覽:349
文件放哪個盤里好 瀏覽:794
經檢測網速正常為什麼網路還卡 瀏覽:430
怎麼創建一個Linux腳本文件 瀏覽:150
xbox2011年自製版本 瀏覽:788
熱門花卡app有哪些 瀏覽:374
js64位編碼上傳圖片 瀏覽:525
緊急通知升級新域名 瀏覽:918
id為什麼下載不得app 瀏覽:658
列印機掃描的文件路徑怎麼修改 瀏覽:876
編程在哪裡做兼職 瀏覽:804
為什麼總是復制隱藏文件 瀏覽:203
穩捷網路 瀏覽:908

友情鏈接