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()<<" ";
}