線性集合:元素按直線方式組織的集合 非線性集合:元素按非直線方式(例如網狀組織或層次組織)組織的集合。
html
集合中的元素一般是按照他們添加到集合中的順序,或者是按元素之間的某種內在關係來組織的。前端
數據結構是一種用於實現集合的基本編程結構。java
Java集合API提供的集合1.可能只是咱們所需集合的一個子集2.可能並無按照咱們所但願的方式來實現這些集合3.對軟件開發的研究要求咱們深刻理解集合設計以及用數據結構實現集合所涉及的一些問題。因此咱們仍需學習如何設計實現集合。android
一般垂直繪製棧,並把棧的末端稱爲棧的頂部。
git
編程人員選擇的數據結構,應與須要進行數據管理的類型相適應。程序員
String x = new Integer(10)
就是不合法的。class Box<T> } //用於管理類型T的對象的聲明和代碼 }
實例化Box類時,須要用具體的類來替換T來實例化它
Box<Widge> box1 = new Box<Widge>
編程
Box<Gadget> box2 = new Box<Widge>
api
box1和box2只能分別儲存Widge和Gadget類型數組
泛型(T)不能被實例化,他只是一個佔位符,容許咱們去定義管理特定類型的對象的類,且只有當該類被實例化時,才建立該類型的對象。數據結構
Java接口定義了一個抽象方法集,有助於把抽象數據類型的概念與其實現分隔開來。
```public interface StackADT <T>```其中interface是保留字,StackADT是接口名,
建立可儲存number個元素的數組,其容量爲number
Object[] collection = Object[number]
/*使用默認容量建立一個空棧*/ public ArryStack() { top = 0; stack = (T[]) (new Object[DEFAULF_CAPACITY]); /*實例化了一個Object數組,而後把他轉換爲一個泛型數組。這裏會產生一個未檢驗類型轉換的編譯時的警告,可用@SuppressWarnings("uncheched")禁止警告。*/ }
/*使用指定容量建立一個空棧,參數initialCapacity表示的是指指定容量*/ public ArrayStack (int initialCapacity) { top = 0; stack = (T[]) (new Object[initialCapacity]) }
stack = (T[]) (new Object[initialCapacity]);
public void push(T element) { if (size() == stack.length) expandCapacity(); stack[top] = element; top++; }
public T pop() throws EmptyCollectionException { if (isEmpty()) throw new EmptyCollectionException("stack"); top--; T result = stack[top]; stack[top] = null; return result; }
public T peek() throws EmptyCollectionException { if (isEmpty()) throw new EmptyCollectionException("stack"); return stack[top-1]; }
``` public boolean isEmpty() { if(size()==0) { return true; }else { return false; } } ```
public int size() { return top; }
public String toString() { String string=""; for(int i=0;i<top;i++) { System.out.println(stack[i]); } return string; }
在一個封閉的空間內,用’0’表示可走,’1’表示牆;有一個起點和一個終點,須要找到從起點到終點的通路,還要保證在尋路的過程當中不會出現來回走的狀況。從起點出發,咱們用0,1,2,3來表示上下左右,也就是尋路的方向;每走一步以後都按照0,1,2,3的方向進行試探能否走,若是能走,把能走的座標和來時的方向進行壓棧,棧裏都是走過的路線,若是0不通走1,1不通走2,2不通走3,都不通退一格,繼續按照0-->1-->2-->3的方向尋路。這就很符合棧的先進後出原理,座標點在棧裏的存儲能夠用數組實現,也能夠用鏈表實現,這裏使用鏈表。存放座標和方向使用類的數組,好像叫什麼結構體,習慣性叫類的數組。
問題二解決:
泛型就是變量類型的參數化。在使用泛型前,存入集合中的元素能夠是任何類型的,當從集合中取出時,全部的元素都是Object類型,須要進行向下的強制類型轉換,轉換到特定的類型。而強制類型轉換容易引發運行時錯誤。泛型類型參數只能被類或接口類型賦值,不能被原生數據類型賦值,原生數據類型須要使用對應的包裝類。
例如:
class GenericsTest<T>
聲明瞭一個泛型類,這個T沒有任何限制,實際上至關於Object類型,實際上至關於
class GenericsTest<T extends Object>
。
與Object泛型類相比,使用泛型所定義的類在聲明和構造實例的時候,可使用「 <實際類型> 」來一併指定泛型類型持有者的真實類型。類如
GenericsTest<Double> douTest=new
GenericsTest<Double>(new Double("33"));
固然,也能夠在構造對象的時候不使用尖括號指定泛型類型的真實類型,可是你在使用該對象的時候,就須要強制轉換了。好比:
GenericsTest douTest=new GenericsTest(new Double("33"));
實際上,當構造對象時不指定類型信息的時候,默認會使用Object類型,這也是要強制轉換的緣由。
問題一:在藍墨雲做業鏈表練習時,須要從鍵盤輸入整數創建鏈表,我仿照課堂上老師演示的student事例,可是那個例子須要實例化Student對象,而做業要求是鍵盤輸入不可提早預知數字的,因此沒法繼續實現。
Node Head = new Node(Integer.parseInt(a[0]));
而後用循環插入建立鏈表for (int i = 0; i < a.length-1; i++) { Node x = new Node(Integer.parseInt(a[i+1])); InsertNode(Head,x); }
就能夠實現了。
//插入 System.out.println(); System.out.println("請輸入要插入的數字:"); Scanner scan3 = new Scanner(System.in); int s = scan3.nextInt(); Node san = new Node(s); System.out.println("請輸入要插入的位置:"); Scanner scan4 = new Scanner(System.in); int f = scan4.nextInt(); Node temp3=Head; for (int i = 1;i<f;i++){ temp3=temp3.next; } InsertNode(Head,san); System.out.println("插入後的鏈表爲:"); PrintLinkedList(Head.next);
//插入 System.out.println(); System.out.println("請問想要插入什麼數字:"); Scanner y = new Scanner(System.in); int pos2=y.nextInt(); Node insertnumber = new Node(pos2); System.out.println("請問想要插入在什麼位置:"); Scanner qq = new Scanner(System.in); int pos = qq.nextInt(); Node abc = Head; if (pos==1){ System.out.println(); System.out.println("插入後的鏈表爲:"); Firstinsert(Head,insertnumber); PrintLinkedList(Head); Node ii=new Node(pos2); InsertNode(Head,ii); int num2=Head.data; Node numm=new Node(num2); InsertNode(Head,numm); Node temp0=Head; } else if (pos!=1&&temp.next!=null){ for (int i = 1;i<pos-1;i++){ linshi = linshi.next; } insert(Head,abc,abc.next,insertnumber); System.out.println("插入後的鏈表爲:"); PrintLinkedList(Head); InsertNode(Head,xxx); } else if (temp.next==null) { InsertNode(Head,insertnumber); System.out.println("插入後的鏈表爲:"); PrintLinkedList(Head); InsertNode(Head,xxx); }
如今是4975行,上學期結束時3872行,增長了1163行。
PP3.2
PP3.8
PP3.9
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import java.util.Stack; public class MainActivity777 extends AppCompatActivity { LinkedStack<String> stack = new LinkedStack(); String xxx = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main777); Button button1 = (Button) findViewById(R.id.button); Button button2 = (Button) findViewById(R.id.button2); button1.setOnClickListener(new myButtonListener()); button2.setOnClickListener(new myButtonListener1()); } public class myButtonListener implements View.OnClickListener { @Override public void onClick(View v) { EditText editText1 = (EditText) findViewById(R.id.editText); stack.push(editText1.getText().toString()); TextView editText2 = (TextView) findViewById(R.id.editText4); editText2.setText(editText1.getText(), TextView.BufferType.EDITABLE); xxx += "進入棧中的數是:"+ stack.peek()+"\n"; editText2.setText(xxx ,TextView.BufferType.EDITABLE); xxx += "當前棧是:" +stack+"\n"; editText2.setText(xxx , TextView.BufferType.EDITABLE); } } public class myButtonListener1 implements View.OnClickListener{ @Override public void onClick(View v){ EditText editText1 = (EditText) findViewById(R.id.editText); stack.pop(); TextView editText2=(TextView) findViewById(R.id.editText4); editText2.setText(editText1.getText(),TextView.BufferType.EDITABLE); xxx += "從棧中彈出的數是:" +stack.peek()+"\n"; editText2.setText( xxx, TextView.BufferType.EDITABLE); xxx += "當前棧是:" +stack+"\n"; editText2.setText(xxx, TextView.BufferType.EDITABLE); } } }
錯題一:
錯題二:
錯題二解析:應該是題目錯了。nlogn的階次大於2n。
對LinkedStack類不是很熟悉,還有鏈表裏的頭插法,但同時對鏈表還有棧的學習更加深刻了一些。
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | |
---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 |
第一週 | 0/0 | 1/1 | 8/8 |
第二週 | 1163/1163 | 1/2 | 15/23 |