导航:首页 > 编程语言 > 用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写一个栈相关的资料

热点内容
java引用传递和值传递 浏览:109
oracle下载安装教程 浏览:854
php筛选数据库 浏览:830
怎么用手机看wlan密码 浏览:745
奥维地图导入的文件在哪里 浏览:364
sdltrados2014教程 浏览:43
培训制度文件在哪里找 浏览:601
勒索病毒防疫工具 浏览:861
win10c不能打开 浏览:375
xfplay影音先锋苹果版 浏览:597
两个文件打开两个word 浏览:921
苹果6s桌面图标轻微抖动 浏览:326
如何删除手机中看不见的临时文件 浏览:469
安卓412原生锁屏apk 浏览:464
书加加缓存文件在哪里 浏览:635
dock是word文件吗 浏览:267
社保公司新办去哪个网站下载资料 浏览:640
三维标注数据怎么填写 浏览:765
数据线断在哪里取出来 浏览:522
word最好的文件 浏览:345

友情链接