Skip to content

Commit 1b7562a

Browse files
authored
Merge pull request onlyliuxin#6 from haolipeng/master
Master
2 parents 1b9deb8 + 0deffde commit 1b7562a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+3439
-0
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package basicStruct;
2+
//
3+
4+
public class BasicStruct {
5+
6+
public static void main(String[] args) {
7+
// TODO Auto-generated method stub
8+
9+
}
10+
11+
}
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
package simpleArrayList;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
6+
public class SimpleArrayList {
7+
//存储array的容器
8+
private Object[] elementData;
9+
10+
//默认容量
11+
public static final int default_capacity = 10;
12+
13+
//array中元素的个数
14+
private int size;
15+
16+
//默认构造函数
17+
public SimpleArrayList(){
18+
//构造大小默认为10的数组
19+
this.elementData = new Object[default_capacity];
20+
}
21+
22+
//带参构造函数,自己指定容量大小
23+
public SimpleArrayList(int initialCapacity) {
24+
if(initialCapacity <= 0){
25+
//参数无效
26+
throw new IllegalArgumentException("IllegalArgument Error");
27+
}
28+
if(initialCapacity < default_capacity)
29+
{
30+
initialCapacity = default_capacity;
31+
}
32+
33+
this.elementData = new Object[initialCapacity];
34+
}
35+
36+
//在索引处添加元素
37+
public boolean Add(int index,Object o)
38+
{
39+
if(index > size || index <0)
40+
{
41+
return false;
42+
}
43+
44+
//查找元素
45+
for (int i = 0; i < size; i++) {
46+
if(o.equals(elementData[i]))
47+
{
48+
//移动元素的个数
49+
int nMove = size -index -1;
50+
if(nMove > 0){
51+
System.arraycopy(elementData, index, elementData, index+1,nMove);
52+
elementData[index] = null;
53+
}
54+
else {
55+
return false;
56+
}
57+
}
58+
}
59+
60+
return true;
61+
}
62+
63+
//添加元素
64+
//返回值:是否添加成功
65+
public boolean Add(Object obj)
66+
{
67+
if (null == obj) {
68+
throw new IllegalArgumentException("invalid Argument!");
69+
}
70+
//给array扩容
71+
ensureCapacityInternal(size + 1);
72+
73+
//数组尾部元素 = 新值
74+
elementData[size++] = obj;
75+
76+
return true;
77+
}
78+
79+
public void clear()
80+
{
81+
//将elementData中元素指向NULL,促使垃圾回收机制启动
82+
for (int i = 0; i < elementData.length; i++) {
83+
elementData[i] = null;
84+
}
85+
86+
//array元素个数清零
87+
size = 0;
88+
}
89+
90+
//移除array中的元素
91+
public boolean remove(Object obj)
92+
{
93+
//遍历elementData,查找元素
94+
for (int index = 0; index < size; index++) {
95+
if(obj.equals(elementData[index]))//是否相等
96+
{
97+
fastRemove(index);
98+
return true;
99+
}
100+
}
101+
return false;
102+
}
103+
104+
private void fastRemove(int index) {
105+
//移动元素的个数
106+
int numMoved = size - index - 1;
107+
if (numMoved > 0)
108+
//将index后数据以此向前移动
109+
System.arraycopy(elementData, index+1, elementData, index,numMoved);
110+
elementData[--size] = null;
111+
}
112+
113+
//返回元素总大小
114+
public int size() {
115+
return size;
116+
}
117+
118+
public Object get(int index) {
119+
//校验参数
120+
if(index > size || index < 0)
121+
throw new IllegalArgumentException();
122+
123+
return elementData[index];
124+
}
125+
126+
//涉及到最大扩容空间问题,暂时先不考虑
127+
private void ensureCapacityInternal(int minCapacity) {
128+
//扩容情况,当前容器容量无法存下新数据时,是否超过了当前数组的长度
129+
System.out.println("element data length is "+elementData.length);
130+
if(minCapacity - elementData.length > 0)
131+
{
132+
//扩容为以前容量的1.5倍
133+
int oldCapacity = elementData.length;
134+
int newCapacity = oldCapacity *3/2;
135+
136+
//内部创建新数组,把elementData的元素拷贝到新数组
137+
elementData = Arrays.copyOf(elementData, newCapacity);
138+
}
139+
}
140+
}
Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
package simpleLinkedList;
2+
3+
import java.util.Iterator;
4+
import java.util.LinkedList;
5+
6+
import javax.sound.sampled.Line;
7+
8+
public class SimpleLinkedList {
9+
//LinkedList<E>
10+
private int size = 0;
11+
private Node head = null;
12+
private Node tail = null;
13+
14+
private static class Node{
15+
Object data;
16+
Node next;//指向后一个元素
17+
Node prev; //指向前一个元素
18+
}
19+
20+
public void add(Object o){
21+
addLast(o);
22+
}
23+
public void add(int index , Object o){
24+
//先找到index位置的元素
25+
Node tmp = null;
26+
for (int i = 0; i < index; i++) {
27+
tmp = tmp.next;
28+
}
29+
30+
Node pre = tmp.prev;
31+
Node next = tmp.next;
32+
33+
if (null == pre) {
34+
addFirst(o); //加入头部
35+
}
36+
else if(null == next){
37+
addLast(o); //加入尾部
38+
}
39+
else {
40+
add(o);
41+
}
42+
}
43+
public Object get(int index){
44+
if (index > size || index <0) {
45+
throw new IllegalArgumentException();
46+
}
47+
48+
Node temp = null;
49+
for(int i=0;i<index;i++){
50+
temp = temp.next;
51+
}
52+
53+
return temp.data;
54+
}
55+
56+
public Object remove(Node delNode){
57+
Object element = delNode.data;
58+
//保存前向元素和后向元素
59+
Node prev = delNode.prev;
60+
Node next = delNode.next;
61+
62+
if(null == head || null == tail){
63+
return null;
64+
}
65+
66+
//删除的是第一个元素
67+
if(null == prev){
68+
head = next;
69+
}
70+
else if (null == next) {
71+
tail = prev;
72+
}
73+
else {
74+
prev.next = next;
75+
next.prev = prev;
76+
}
77+
78+
//删除节点元素
79+
delNode.prev = null;
80+
delNode.next = null;
81+
delNode.data = null;
82+
83+
return element;
84+
}
85+
86+
public Object remove(int index){
87+
//定位到元素
88+
Node temp = null;
89+
for(int i=0;i<index;i++){
90+
temp = temp.next;
91+
}
92+
93+
return null;
94+
}
95+
96+
public int size(){
97+
return size;
98+
}
99+
100+
public void addFirst(Object o){
101+
//记录原头部节点
102+
final Node tmpHead = head;
103+
104+
//申请新节点并赋值
105+
Node newNode = new Node();
106+
if (null == newNode) {
107+
throw new OutOfMemoryError();
108+
}
109+
newNode.data = o;
110+
newNode.next = null;
111+
newNode.prev = null;
112+
113+
if (null == head) {
114+
head = tail = newNode;
115+
}
116+
else {
117+
newNode.next = tmpHead;
118+
tmpHead.prev = newNode;
119+
//更改头部元素指针
120+
head = newNode;
121+
}
122+
}
123+
public void addLast(Object o){
124+
//记录原尾部元素
125+
final Node tmpTail = tail;
126+
127+
//申请新节点并赋值
128+
Node newNode = new Node();
129+
if (null == newNode) {
130+
throw new OutOfMemoryError();
131+
}
132+
newNode.data = o;
133+
newNode.next = null;
134+
135+
//考虑第一次插入
136+
if(null == tail){
137+
head = newNode;
138+
tail = newNode;
139+
}
140+
else {
141+
tail.next = newNode;
142+
newNode.prev = tmpTail;
143+
tail = newNode;
144+
}
145+
146+
//统计元素个数
147+
size++;
148+
}
149+
public Object removeFirst(){
150+
//保存头部节点
151+
Object element = head.data;
152+
Node nextNode = head.next;
153+
154+
//释放头结点
155+
head.data = null;
156+
head.next = null;
157+
158+
//只有一个元素
159+
if (head == tail) {
160+
head = tail = null;
161+
}
162+
else {
163+
head = nextNode;
164+
nextNode.prev = null;
165+
}
166+
167+
//减少元素数量
168+
size--;
169+
170+
return element;
171+
}
172+
public Object removeLast(){
173+
//记录尾部元素
174+
Object element = tail.data;
175+
Node prev = tail.prev;
176+
177+
//释放尾部阶段
178+
tail.next = null;
179+
tail.data = null;
180+
181+
//设置新尾部
182+
tail = prev;
183+
184+
if (head == tail) {
185+
head = null;
186+
tail = null;
187+
}
188+
else {
189+
prev.next = null;
190+
}
191+
size--;
192+
return element;
193+
}
194+
public Iterator iterator(){
195+
return null;
196+
}
197+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package simpleQueue;
2+
3+
import java.util.LinkedList;;
4+
5+
public class SimpleQueue {
6+
LinkedList<Object> queueList = new LinkedList();
7+
public void enQueue(Object o){
8+
queueList.add(o);
9+
}
10+
11+
public Object deQueue(){
12+
return queueList.removeFirst();
13+
}
14+
15+
public boolean isEmpty(){
16+
return queueList.isEmpty();
17+
}
18+
19+
public int size(){
20+
return queueList.size();
21+
}
22+
}

0 commit comments

Comments
 (0)