程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 棧java實現

棧java實現

編輯:關於JAVA

棧java實現。本站提示廣大學習愛好者:(棧java實現)文章只能為提供參考,不一定能成為您想要的結果。以下是棧java實現正文


  這幾天,過得挺充實的,每天都在不停的上課,早上很早就起來去跑步,晚上到圖書館看書。一邊緊張的學習,一邊在默默的備戰軟考。最近還接手了一個公司官網的建設。這是我在川信最後的一個完整學期了,每件事我都要認真去做。就算會有失落,會有失敗,會有不甘,也不輕言放棄。

  剛剛下去跑了幾圈,吹著夜晚的冷風,在操場狂奔。汗水濕透了全身,滴在鏡片上,我快看不清了遠方。想起很多事來,來川信的兩年,參加了兩次運動會,這是第三次,且每次都是長跑,我享受著這種超越自己的感覺。長跑遠沒有結束,我一直在這條路上。

  對於時間的安排,我的重點還是軟考下午的5道大題,算法數據結構,設計模式,數據流圖,數據庫設計,uml例圖,項目設計等。經過這幾天努力,用java實現了常用的幾種數據結構,畫了很多的圖,其中真是奧妙無窮。下一步,是算法設計,然後設計模式等。因為高中學了2年的計算機基礎和網絡知識,所以上午的一知半解。准備通過反復做題和百度練習。將下午的復習完畢之後,將進入全面復習階段。通過真題訓練,反復看書,做題,看代碼,寫代碼。希望通過這次的復習,能夠吸收這些知識轉換為自己的思想,而不是死記硬背,應付考試。

  下面是棧的順序存儲結構和鏈式存儲實現:

  

 1 package stack;
 2 
 3 public interface IStack<E> {
 4     //1.判斷空棧
 5     public boolean isEmpty();
 6     
 7     //2.判斷棧滿
 8     public boolean isMax();
 9     
10     //3.入棧
11     public boolean push(E e);
12     
13     //4.出棧
14     public E pop();
15     
16     //5.返回棧頂
17     public E peek();
18     
19     //6.返回元素在棧中的位置
20     public int getIndex(E e);
21     
22     //7.返回棧的實際長度
23     public int size();
24     
25     //8.返回棧容量
26     public int getStackSize();
27     
28     //9.打印棧
29     public void display();
30     
31     
32 
33 }

//順序棧

  1 package stack;
  2 
  3 //我的棧數據結構
  4 public class MyStack<E> implements IStack<E>{
  5     private Object[] data = null; //數據域
  6     private int top = -1;           //棧頂指針初始化為-1
  7     private int maxSize = 0;      //棧最大容量
  8     
  9     //默認設置棧容量為10
 10     MyStack(){
 11         this(10);
 12     }
 13     
 14     public MyStack(int initialSize){
 15         if(initialSize >= 0){
 16             this.data = new Object[initialSize]; //初始化數組
 17             this.maxSize = initialSize; //設置棧最大容量
 18             this.top = -1;
 19         }
 20     }
 21     
 22     public boolean isEmpty() {
 23         return top == -1 ? true : false; //根據棧頂值判斷,如果棧頂指針沒有更新,則為空棧
 24     }
 25 
 26     public boolean isMax() {
 27         return top >= maxSize-1 ? true : false; //根據棧頂值判斷,如果棧頂指針大於最大容量,則為滿棧
 28     }
 29 
 30     public boolean push(E e) {
 31         if(isMax()){
 32             System.err.println("對不起,棧已滿,無法入棧");
 33             return false;
 34         }
 35         top ++; //更新棧頂下標
 36         data[top] = e; //將元素添加到表中
 37 //        System.out.println("添加" + e + "成功");
 38         return true;
 39     }
 40 
 41     @SuppressWarnings("unchecked")
 42     public E pop() {
 43         if(isEmpty()){
 44             System.err.println("對不起,目前是空棧,沒有元素可以出棧");
 45             return null;
 46         }
 47         E e = (E) data[top]; //返回當前的棧頂元素
 48         top--; //更新棧頂
 49         return e;
 50     }
 51 
 52     @SuppressWarnings("unchecked")
 53     public E peek() {
 54         if(isEmpty()){
 55             System.err.println("對不起,目前是空棧,無法返回棧頂元素");
 56             return null;
 57         }
 58         return (E) data[top]; //返回棧頂元素
 59     }
 60 
 61     public int getIndex(E e) {
 62         //根據棧頂和棧底(-1)遍歷棧
 63         while(top != -1){
 64             //peek()返回當前棧頂
 65             if(peek().equals(e)){
 66                 return top;
 67             }
 68             top --;
 69         }
 70         
 71         return -1;
 72     }
 73 
 74     public int size() {
 75         return this.top+1; //棧頂值+1,為棧元素的實際個數
 76     }
 77 
 78     public int getStackSize() {
 79         return this.maxSize; //返回棧實際長度
 80     }
 81 
 82     public void display() {
 83         //根據棧頂和棧底(-1)遍歷
 84         while(top != -1){
 85             System.out.println(top);
 86             top --;
 87         }
 88     }
 89     
 90     public static void main(String[] args) {
 91         MyStack<Integer> stack = new MyStack<Integer>();
 92         //入棧
 93         for (int i = 0; i < 10; i++) {
 94             stack.push(i); 
 95         }
 96         //出棧
 97 //        stack.pop();
 98         //返回棧頂
 99 //        System.out.println(stack.peek());
100         //求長
101 //        System.out.println(stack.size());
102         
103     }
104     
105 }


//鏈棧

 1 package stack;
 2 
 3 //鏈棧是棧的鏈式存儲結構,由多個節點組成。在鏈棧中的棧頂為頭節點,節點由數據域和指針域組成
 4 //對鏈棧的操作都是間接的通過棧頂(頭節點)完成。
 5 //順序棧是一種特殊的順序表
 6 //鏈棧是一種特殊鏈表
 7 public class LinkedStack{
 8     //定義節點類
 9     private class Node{
10         public Object data = null; //數據域
11         public Node next = null;   //指針域
12         
13         //構造函數初始化
14         @SuppressWarnings("unused")
15         public Node(){}
16         
17         public Node(Object data, Node next){
18             this.data = data;
19             this.next = next;
20         }
21 
22         @Override
23         public String toString() {
24             return "Node [data=" + data + ", next=" + next + "]";
25         }
26     }/*Node*/
27     
28     private Node top = null; //定義棧頂
29     private int size = 0;    //定義棧節點數量
30     
31     //判斷棧空
32     public boolean isEmpty(){
33         return size == 0 ? true : false;
34     }
35         
36     //壓棧
37     public boolean push(Object obj){
38         //更新頭節點,讓新節點指向原來的頭節點
39         System.out.println("壓棧成功:" + obj + "指向->" + top);
40         top = new Node(obj, top); //壓棧是將節點插入到棧頂之前。也就是更新頭節點。改變指針指向
41         size ++; //棧長度++
42         return true;
43     }
44     
45     //出棧
46     public Object pop(){
47         if(isEmpty()){
48             System.out.println("對不起,目前是空棧,不能出棧");
49             return null;
50         }
51         Node temp = top;     //頭節點引用
52         top = top.next;        //更新頭節點
53         temp.next = null;     //釋放引用,刪除指針指向
54         size-- ;             //棧節點數量-1
55         return temp.data;   //出棧
56     }
57     
58     //返回棧頂元素,但不彈出棧
59     public Object peek(){
60         return this.top.data; //直接返回棧頂元素
61     }
62     
63     //遍歷棧並打印
64     public void display(){
65         //從棧頂節點開始到棧底節點null遍歷
66         while(top != null){
67             System.out.println(top.data);
68             top = top.next;
69         }
70     }
71     
72     //返回元素在棧中的位置
73     public int getIndex(Object obj){
74         int i = 0;
75         while(top != null){
76             if(peek().equals(obj)){
77                 return i; 
78             }
79             top = top.next;
80             i++;
81         }
82         return -1;
83     }
84     
85     //返回棧的長度
86     public int getSize(){
87         return this.size;
88     }
89     
90     public static void main(String[] args) {
91         LinkedStack stack = new LinkedStack();
92         for (int i = 0; i < 10; i++) {
93             stack.push(i);
94         }
95 //        stack.display();
96         System.out.println(stack.getIndex(9));
97     }
98     
99 }

明天更新隊列和樹,然後是圖的深度優先,廣度優先,各種算法。

 

 

 

 

  

 

 

  

  

   

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved