国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

如何對棧進行簡單的初級操作

2019-11-11 01:46:52
字體:
來源:轉載
供稿:網友
何為棧         棧在數據結構當中稱為一種線性表,它限制只能在表的一端進行插入或刪除操作。這一端就叫做棧頂,反之另一端則稱為棧底。      棧有個明顯的特征是后進先出(Last in first out),這一特征無論在java或者數據結構中我們都遵循。

      棧在java中我們稱為Stack類,它是Vector類的子類,而Vector又是List接口的子接口。

          既然說到Vector類,我們延伸一個知識點,即Vector與ArrayList的區別:        1. Vector的方法都是同步的(Synchronized),是線程安全的(thread-safe),而ArrayList的方法不是,由于線程的同步必然要影響性能,因此,ArrayList的性能比Vector好        2.當Vector或ArrayList中的元素超過它的初始大小時,Vector會將它的容量翻倍,而ArrayList只增加50%的大小,這樣,ArrayList就有利于節約內存空間。

 棧的操作      棧除了繼承了Vector類的所有方法之外,它還有自己獨特的方法:boolean empty():判斷堆棧是否為空。Object peek():    返回棧頂元素,但不刪除它。Object pop():    返回棧頂元素,并在這個過程中刪除它。Object push(Object element):壓入element到堆棧,同時返回element。int search(Object element):查找element對象,返回element對象所在位置的    下標,如果不存在element對象則返回-1。     注意看個方法的作用,返回類型和是否帶參!下面我們通過一個自己創建的棧來演示其中的壓棧,彈棧和返回棧頂元素的操作。

public class TryPRe {        private List lis;    public TryPre() {                               lis=new ArrayList();//創建集合對象,然后就可以接收棧元素    }    public Object push(Object ob)//壓棧,該方法帶參    {              return lis.add(ob);    }        public     Object peek()//返回棧頂元素    {//        if(lis.size()==0)//當集合長度為0的時候就沒法返回棧頂元素,所有才會發生異常//        {//            throw new TryPreException();//        }        return lis.get(lis.size()-1);    }            public Object pup()//彈棧    {//        if(lis.size()==0)//當集合長度為0的時候就沒法彈棧//        {//            throw new TryPreException();//        }        Object  ob=lis.get(lis.size()-1);//先存到ob里面        lis.remove(lis.size()-1);//刪除棧頂元素        return ob;    }    }

public class TryPreTest {public static void main(String[] args) {TryPre tp=new TryPre();tp.push("01張無忌");tp.push("02獅王");tp.push("03鷹王");tp.push("04蝙蝠王");tp.push("05趙敏");System.out.println("棧頂元素是:"+tp.peek());//當我們再一次調用peek()方法時返回的結果依然是一樣的for (int i = 0; i < 5; i++) {System.out.println("彈棧順序是:"+tp.pup());}}} 那么我們考慮一個問題,如果當i<5改為i<=5時會發生什么異常(會發生集合下標越界異常而不是棧空異常,這是因為這個棧是我們自己定義的棧,里面的方法也是自定義的,如果用Stack sk=new Stack()來創建對象,然后用對象去調用里面的操作方法那么當出現剛才這種情況時就會出現棧空異常)          下面我們來自定義一個異常來處理這種問題

//取消TryPre當中的注釋代碼和把TryPreTest中的i<5改為i<=5

public class TryPreException extends RuntimeException{//因為出現下標越界時沒有提示強制拋出    public TryPreException() {    // TODO Auto-generated constructor stub    super("棧空已經空了,無法彈出元素");}}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邵东县| 崇仁县| 井冈山市| 运城市| 聂荣县| 惠东县| 赞皇县| 孙吴县| 陆川县| 金坛市| 怀宁县| 二手房| 互助| 高碑店市| 洛扎县| 韶关市| 额尔古纳市| 太和县| 枣庄市| 静海县| 陆良县| 临泽县| 珲春市| 龙陵县| 红桥区| 新昌县| 新建县| 莱阳市| 台安县| 武宁县| 丰镇市| 孟连| 昭通市| 罗田县| 青龙| 祁东县| 青州市| 邛崃市| 施秉县| 定结县| 德安县|