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

热点内容
编译文件路径不能包含空格 浏览:44
linux打开文件系统检查失败 浏览:624
用什么网站能接室内翻新的活 浏览:235
三星手机应用程序许可 浏览:203
mh版本 浏览:288
编程猫幼儿园怎么样 浏览:50
公交app如何安装 浏览:692
iphone4耳机怎么用 浏览:605
学习课文的app有哪些 浏览:834
ios10导出文件到电脑 浏览:9
数控编程怎么编新程序 浏览:418
编程题怎么分解 浏览:998
本科生找工作应该学什么编程语言 浏览:803
android系统应用升级 浏览:55
哪些数据证明怀孕 浏览:178
激光打标机文件转到cad 浏览:303
win10creationtool 浏览:762
云服务器在哪个文件夹 浏览:297
qvs文件格式转换器那种好 浏览:285
收购微信大群要活的 浏览:955

友情链接