Java實現棧。

定義一個接口MyStack接口:

package Stack;

public interface MyStack<T> {
boolean isEmpty();
int length();
boolean push(T date);
T pop();
}

數組實現:

package Stack;

public class ArrayStack<T> implements MyStack<T>{
private Object[] objs = new Object[16];
// size相當于游標
private int size = 0;
public boolean isEmpty() {

return size==0;
}

@Override
public int length() {
// TODO Auto-generated method stub
return size;
}

@Override
public boolean push(T date) {
if(size>=objs.length){
resize();
}
objs[size]=date;
size++;
return true;
}

@Override
public T pop() {
if(size==0){
return null;
}

return (T) objs[--size];
}
public void resize(){
Object[] temp = new Object[objs.length*3/2+1];
for(int i=0;i<size;i++){
temp[i]=objs[i];
objs[i] = null;
}
objs=temp;
}
public String toString(){
StringBuffer sb= new StringBuffer();
sb.append("ArrayStack:[");
for(int i =0;i<size;i++){
sb.append(objs[i]);
if(i!=size-1){
sb.append(",");
}
}
sb.append("]");
return sb.toString();
}
}

鏈表實現:

package Stack;

public class LinkStack<T> implements MyStack<T> {
Node top=null;
int size=0;

@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return top==null;
}

@Override
public int length() {

return size;
}

@Override
public boolean push(T date) {
Node node = new Node();
node.date = date;
node.node = top;
top=node;
size++;
return true;
}

@Override
public T pop() {
if(size!=0){
Node node = top;
top=node.node;
size--;
return node.date;
}
return null;
}
class Node{
private Node node;
private T date;
}
}

測試:

/**
*
*/
package Stack;

import org.junit.Test;


/**
* @author zjj19960106
*
*/
public class TestSpeed {
class Person{
public Person(String name, int age) {
this.name=name;
this.age=age;
}
private String name;
private int age;
}
@Test
public void testSpeed() {
MyStack<Person> stack = new ArrayStack<Person>();
int num = 10000000;
long start = System.currentTimeMillis();
for (int i = 0; i < num; i++) {
stack.push(new Person("xing", 25));
}
long temp = System.currentTimeMillis();
System.out.println("push time: " + (temp - start));
while (stack.pop() != null) ;
System.out.println("pop time: " + (System.currentTimeMillis() - temp));
}

}

結果:鏈表的時間大于數組,棧的操作是對棧頂進行,所以使用數組也是O(1),不會出現數組中的元素移動位置,而使用棧每個數據還有進行封裝成節點,所以時間比數組長。

轉載于:https://www.cnblogs.com/52zjj/p/4532604.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374996.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374996.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374996.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

轉載]SA權限九種上傳方法

剛看了一種方法&#xff0c;如果是注入點&#xff0c;利用管中窺豹以二進制的方式上傳&#xff0c;上傳的時候最好改下名&#xff0c;比如do.exe&#xff0c;上傳到目標服務器可以改成do.cmd&#xff0c;等傳上去之后用copy 命令改回來。 當然用啊d也可以上傳&#xff0c;還有…

asp.net 導出Excel

asp.net 導出Excel 分享一個asp.net 導出假Excel代碼。優點&#xff0c;不用借助于任何插件比如&#xff08;NPOI&#xff09;,復制代碼&#xff0c;修改grid.DataSource直接導出。 先看導出后的效果圖 1 System.Web.UI.WebControls.DataGrid grid new DataGrid();2 …

bzoj 2300 動態維護上凸殼(不支持刪除)

新技能GET。 用set保存點&#xff0c;然后只需要找前趨和后繼就可以動態維護了。 1 /**************************************************************2 Problem: 23003 User: idy0024 Language: C5 Result: Accepted6 Time:556 ms7 Memory:4824 kb8 …

帶有Guice的富域模型

貧血域模型是一個非常常見的反模式。 在ORM和DI框架的世界中&#xff0c;我們自然會發現自己擁有一個由ORM管理的“域”&#xff0c;該域包含所有數據且無行為。 通過我們的DI框架有幫助地注入了輔助類&#xff0c;這些輔助類都是行為且沒有數據。 在本文中&#xff0c;我將介紹…

php匿名函數小示例

<?php //$fun function($params){ // echo $params; //}; // //$fun(aa);//例一 //在普通函數中定義一個匿名函數 //function printStr(){ // $fun function($something){ // echo $something; // }; // $fun(something); // //} //printStr();//例子…

購書心得

作者&#xff1a;泉哥主頁&#xff1a;http://riusksk.blogbus.com富家不用買良田&#xff0c;書中自有千鐘粟&#xff1b;安居不用架高堂&#xff0c;書中自有黃金屋&#xff1b;出門莫恨無人隨&#xff0c;書中車馬多如簇&#xff1b;娶妻莫恨無良媒&#xff0c;書中自有顏如…

MariaDB?條件語句WHERE

MariaDB 條件語句WHEREWHERE Clause Operators Operator Description Equality<> Nonequality! Nonequality< Less than< Less than or equal to > Greater than > Greater than or equal to BETWEEN Between two specified values BETWEEN AND (jlive)[c…

Spring 3.1緩存抽象教程

即將發布的Spring 3.1版本中引入的新功能之一是緩存抽象之一 。 Spring Framework提供了對將緩存透明添加到現有Spring應用程序中的支持。 與事務支持類似&#xff0c;緩存抽象允許一致使用各種緩存解決方案&#xff0c;而對代碼的影響最小。 從本質上講&#xff0c;抽象將緩存…

《Linux內核分析》 第四節 扒開系統調用的三層皮(上)

黃胤凱 原創作品轉載請注明出處 《Linux內核分析》MOOC課程http://mooc.study.163.com/course/USTC-1000029000 一、視頻學習 1.系統調用的三層皮&#xff1a;xyz system_call sys_xyz 對應的是API&#xff0c;中斷向量對應的中斷服務程序&#xff0c;系統調用服務程…

如何在Java中獲得類似于C的性能

總覽 Java有許多可能很慢的領域。 但是&#xff0c;對于每個問題都有解決方案。 許多解決方案/黑客都需要解決Java的保護問題&#xff0c;但是如果您需要低水平的性能&#xff0c;還是可以的。 Java使高級編程變得更簡單容易&#xff0c;但代價是使低級編程變得更加困難。 幸…

STARTUPINFO結構

1.結構原型 typedef struct _STARTUPINFO { DWORD cb; LPTSTR lpReserved; LPTSTR lpDesktop; LPTSTR lpTitle; DWORD dwX; DWORD dwY; DWORD dwXSize; DWORD dwYSize; DWORD dwXCountChars; DWORD dwYCountChars; DWORD dwFillAttribute; DWORD dwFlags; WORD w…

Spring聲明式事務示例

事務是具有ACID &#xff08;原子的&#xff0c;一致的&#xff0c;隔離的和持久的&#xff09;屬性的工作單元。 原子意味著所有更改都發生或什么都沒有發生。 如果從一個帳戶借錢并貸記到另一個帳戶&#xff0c;則交易將確保借記和貸項均已完成或均未完成。 一致表示更改使數…

路徑 (Path)–nodejs

本模塊包含一套用于處理和轉換文件路徑的工具集。幾乎所有的方法只做字符串變換&#xff0c; 不會調用文件系統檢查路徑是否有效。 通過 require(path) 來加載此模塊。以下是本模塊所提供的方法&#xff1a; path.normalize(p) 規范化字符串路徑&#xff0c;注意 .. 和 . 部分 …

OllyDBG反匯編快速找到程序入口一點分析

出處&#xff1a;http://hi.baidu.com/0soul/blog/item/b62f8f08c2c3c42c6b60fbbe.html 先聲明下&#xff1a;這個和脫殼沒關系&#xff0c;不是找殼里面的程序入口哦&#xff0c;只是程序本身的入口&#xff0c;個別朋友不要誤會哈。其實這個應該是基礎&#xff0c;但我經常找…

簡單的Twitter:Heroku上的Play框架,AJAX,CRUD

因此&#xff0c;重大的公告發布了– Heroku開始為Play Framework應用程序提供本機支持&#xff01; 如果您還沒有聽說過&#xff0c;請在Heroku的博客上查看Jesper Joergensen的帖子 。 因此&#xff0c;對于演示&#xff0c;我將建立一個非常基本的Twitter副本&#xff1b; 它…

Cron表達式

CronTrigger CronTriggers往往比SimpleTrigger更有用&#xff0c;如果您需要基于日歷的概念&#xff0c;而非SimpleTrigger完全指定的時間間隔&#xff0c;復發的發射工作的時間表。CronTrigger&#xff0c;你可以指定觸發的時間表如“每星期五中午”&#xff0c;或“每個工作日…

深入理解JavaScript學習筆記(3)_全面解析Module模式

簡介 Module模式是JavaScript編程中一個非常通用的模式&#xff0c;一般情況下&#xff0c;大家都知道基本用法&#xff0c;本文嘗試著給大家更多該模式的高級使用方式。 首先我們來看看Module模式的基本特征&#xff1a; 模塊化&#xff0c;可重用封裝了變量和function&#x…

匯編----乘指令: MUL、IMUL

MUL: 無符號乘 ;影響 OF、CF 標志位;指令格式:;MUL r/m ;參數是乘數;如果參數是 r8/m8, 將把 AL 做乘數, 結果放在 AX;如果參數是 r16/m16, 將把 AX 做乘數, 結果放在 EAX;如果參數是 r32/m32, 將把 EAX 做乘數, 結果放在 EDX:EAX IMUL: 有符號乘 ;影響 OF、CF 標志位;…

Google App Engine Java功能和命名空間API

功能API 使用Capabilities API&#xff0c;您的應用程序可以檢測特定API功能的停機和計劃停機時間。 您可以使用此API來檢測應用程序何時不可用&#xff0c;然后繞過它來減少應用程序的停機時間。 我們該如何處理&#xff0c;這是個折衷方案&#xff1f; 1.優雅&#xff1a;創…