forked from onlyliuxin/coding2017
-
Notifications
You must be signed in to change notification settings - Fork 20
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #10 from stackwei/master
first commit homework of 2.19
- Loading branch information
Showing
9 changed files
with
449 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -17,3 +17,6 @@ hs_err_pid* | |
#ide config | ||
.metadata | ||
.recommenders | ||
|
||
#macOS | ||
.DS_Store |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<classpath> | ||
<classpathentry kind="src" path="src"/> | ||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> | ||
<classpathentry kind="output" path="bin"/> | ||
</classpath> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<projectDescription> | ||
<name>DataStructure219</name> | ||
<comment></comment> | ||
<projects> | ||
</projects> | ||
<buildSpec> | ||
<buildCommand> | ||
<name>org.eclipse.jdt.core.javabuilder</name> | ||
<arguments> | ||
</arguments> | ||
</buildCommand> | ||
</buildSpec> | ||
<natures> | ||
<nature>org.eclipse.jdt.core.javanature</nature> | ||
</natures> | ||
</projectDescription> |
11 changes: 11 additions & 0 deletions
11
group16/1012075117/DataStructure219/.settings/org.eclipse.jdt.core.prefs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
eclipse.preferences.version=1 | ||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled | ||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 | ||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve | ||
org.eclipse.jdt.core.compiler.compliance=1.8 | ||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate | ||
org.eclipse.jdt.core.compiler.debug.localVariable=generate | ||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate | ||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error | ||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error | ||
org.eclipse.jdt.core.compiler.source=1.8 |
94 changes: 94 additions & 0 deletions
94
group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/ArrayList.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
package com.stackwei.DataStructure; | ||
|
||
/** | ||
* | ||
* @author stackwei -2017.2.25 | ||
* | ||
*/ | ||
public class ArrayList implements List { | ||
|
||
private int flag = -1; | ||
private static final int DEFAULT_CAPACITY = 1; | ||
private Object[] elementData = new Object[DEFAULT_CAPACITY]; | ||
|
||
@Override | ||
public void add(Object element) { | ||
// 当要添加数据的位置已经超过数组长度时,增长数组长度 | ||
if (size() + 1 == elementData.length) { | ||
grow(); | ||
} | ||
elementData[flag + 1] = element; | ||
flag++; | ||
} | ||
|
||
@Override | ||
public void add(int index, Object element) { | ||
if (index < 0 || index > getFlag() + 1) { | ||
System.out.println("在--" + index + "--添加的--" + element + "--无效,因为越界了!"); | ||
return; | ||
} | ||
// 数组长度永远比已存数据大一个。 | ||
if (size() + 1 == elementData.length) { | ||
grow(); | ||
} | ||
elementData[index] = element; | ||
if (index > getFlag()) { | ||
flag++; | ||
} | ||
} | ||
|
||
@Override | ||
public Object get(int index) { | ||
if (index < 0 || index > getFlag()) { | ||
System.out.print("在--" + index + "--的get无效,因为越界了!"); | ||
return null; | ||
} | ||
return elementData[index]; | ||
} | ||
|
||
@Override | ||
public Object remove(int index) { | ||
if (index < 0 || index > getFlag()) { | ||
System.out.println("在--" + index + "--的remove无效,因为越界了!"); | ||
return null; | ||
} | ||
Object oldValue = elementData[index]; | ||
elementData[index] = null; | ||
// 将删除处后面的数据往前移一格。 | ||
Object[] data2 = new Object[elementData.length - 1]; | ||
System.arraycopy(elementData, 0, data2, 0, getFlag()); | ||
elementData = data2; | ||
flag--; | ||
return oldValue; | ||
} | ||
|
||
@Override | ||
public int size() { | ||
return getFlag() + 1; | ||
} | ||
|
||
public int getFlag() { | ||
return flag; | ||
} | ||
|
||
private void grow() { | ||
Object[] data2 = new Object[elementData.length + 1]; | ||
System.arraycopy(elementData, 0, data2, 0, getFlag() + 2);// 最后一个参数是需要复制的数据的数量。 | ||
elementData = data2; | ||
} | ||
|
||
/** | ||
* 测试用例 | ||
* | ||
* @param args | ||
*/ | ||
public static void main(String[] args) { | ||
ArrayList al = new ArrayList(); | ||
al.add(0, 99); | ||
al.add(1, 100); | ||
System.out.println(al.get(1)); | ||
al.remove(1); | ||
System.out.println(al.get(1)); | ||
System.out.println(al.size()); | ||
} | ||
} |
194 changes: 194 additions & 0 deletions
194
group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/LinkedList.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,194 @@ | ||
package com.stackwei.DataStructure; | ||
|
||
/** | ||
* | ||
* @author stackwei -2017.2.25 | ||
* | ||
*/ | ||
public class LinkedList implements List { | ||
|
||
private Node head = null; | ||
private Node last = null; | ||
private int size = 0; | ||
|
||
private static class Node { | ||
Object item; | ||
Node prev; | ||
Node next; | ||
|
||
public Node(Node prev, Object item, Node next) { | ||
this.prev = prev; | ||
this.item = item; | ||
this.next = next; | ||
} | ||
} | ||
|
||
@Override | ||
public void add(Object element) { | ||
addLast(element); | ||
} | ||
|
||
@Override | ||
public void add(int index, Object element) { | ||
if (index < 0 || index > size) { | ||
System.out.println("操作无效,越界了"); | ||
return; | ||
} | ||
if (index == 0) { | ||
addFirst(element); | ||
return; | ||
} | ||
if (index == size) { | ||
addLast(element); | ||
return; | ||
} | ||
Node indexNode = node(index); | ||
Node newNode = new Node(indexNode.prev, element, indexNode); | ||
indexNode.prev.next = newNode; | ||
indexNode.prev = newNode; | ||
size++; | ||
} | ||
|
||
@Override | ||
public Object get(int index) { | ||
if (index < 0 || index >= size) { | ||
System.out.println("查询无效,越界了"); | ||
return null; | ||
} | ||
if (index == 0) { | ||
return head.item; | ||
} | ||
return node(index).item; | ||
} | ||
|
||
@Override | ||
public Object remove(int index) { | ||
if (index < 0 || index > size) { | ||
System.out.println("是空的,无法删除"); | ||
return null; | ||
} | ||
if (index == 0) { | ||
return removeFirst(); | ||
} | ||
if (index == size - 1) { | ||
return removeLast(); | ||
} | ||
Node x = node(index); | ||
final Object element = x.item; | ||
final Node next = x.next; | ||
final Node prev = x.prev; | ||
|
||
if (prev == null) { | ||
head = next; | ||
} else { | ||
prev.next = next; | ||
x.prev = null; | ||
} | ||
|
||
if (next == null) { | ||
last = prev; | ||
} else { | ||
next.prev = prev; | ||
x.next = null; | ||
} | ||
|
||
x.item = null; | ||
size--; | ||
return element; | ||
} | ||
|
||
@Override | ||
public int size() { | ||
return size; | ||
} | ||
|
||
private void addFirst(Object element) { | ||
final Node f = head; | ||
Node newNode = new Node(null, element, f); | ||
head = newNode; | ||
if (f == null) | ||
last = newNode; | ||
else | ||
f.prev = newNode; | ||
size++; | ||
} | ||
|
||
public void addLast(Object element) { | ||
if (head == null) { | ||
addFirst(element); | ||
} else { | ||
Node newNode = new Node(last, element, null); | ||
last.next = newNode; | ||
last = newNode; | ||
size++; | ||
} | ||
} | ||
|
||
public Object removeFirst() { | ||
if (head == null) { | ||
System.out.println("是空的,无法删除"); | ||
return null; | ||
} else { | ||
Node x = head; | ||
Node next = head.next; | ||
Object element = x.item; | ||
x.item = null; | ||
x.next = null; | ||
head = next; | ||
if (next == null) | ||
last = null; | ||
else | ||
x.prev = null; | ||
size--; | ||
return element; | ||
} | ||
} | ||
|
||
public Object removeLast() { | ||
if (last == null) { | ||
System.out.println("是空的,无法删除"); | ||
return null; | ||
} else { | ||
final Node l = last; | ||
final Object element = l.item; | ||
final Node p = l.prev; | ||
l.item = null; | ||
l.prev = null; | ||
last = p; | ||
if (p == null) | ||
head = null; | ||
else | ||
p.next = null; | ||
size--; | ||
return element; | ||
} | ||
} | ||
|
||
Node node(int index) { | ||
if (index < (size >> 1)) { | ||
Node x = head; | ||
for (int i = 0; i < index; i++) | ||
x = x.next; | ||
return x; | ||
} else { | ||
Node x = last; | ||
for (int i = size - 1; i > index; i--) | ||
x = x.prev; | ||
return x; | ||
} | ||
} | ||
|
||
/** | ||
* 测试用例 | ||
* | ||
* @param args | ||
*/ | ||
public static void main(String[] args) { | ||
LinkedList ll = new LinkedList(); | ||
ll.add(0, "xxx"); | ||
ll.add(1, 111); | ||
System.out.println(ll.size()); | ||
System.out.println(ll.get(2)); | ||
|
||
} | ||
} |
13 changes: 13 additions & 0 deletions
13
group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/List.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package com.stackwei.DataStructure; | ||
|
||
public interface List { | ||
public void add(Object o); | ||
|
||
public void add(int index, Object o); | ||
|
||
public Object get(int index); | ||
|
||
public Object remove(int index); | ||
|
||
public int size(); | ||
} |
Oops, something went wrong.