Skip to content

Commit

Permalink
first commit homework of 2.19
Browse files Browse the repository at this point in the history
  • Loading branch information
stackwei committed Feb 25, 2017
1 parent eb3a802 commit b8e89d2
Show file tree
Hide file tree
Showing 9 changed files with 449 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,6 @@ hs_err_pid*
#ide config
.metadata
.recommenders

#macOS
.DS_Store
6 changes: 6 additions & 0 deletions group16/1012075117/DataStructure219/.classpath
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>
17 changes: 17 additions & 0 deletions group16/1012075117/DataStructure219/.project
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>
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
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());
}
}
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));

}
}
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();
}
Loading

0 comments on commit b8e89d2

Please sign in to comment.