线性集合:元素按直线方式组织的集合 非线性集合:元素按非直线方式(例如网状组织或层次组织)组织的集合。
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 |