得分46.25
有一个点的bug不会修(希望大佬带我),style没有注意。
1.LinkedListDeque.java

public class LinkedListDeque <T>{
private class staffnode{
private T item;
private staffnode pre;
private staffnode next; private staffnode(T x) {
item=x; }
}
private int size=1;
private staffnode first;
private staffnode last;
private staffnode standf; private LinkedListDeque(T x) {
first=new staffnode(x);
standf=new staffnode(x);
first.next=standf;
first.pre=standf;
standf.next=first;
standf.pre=first;
last=first;
size=1; } public LinkedListDeque() {
standf=new staffnode(null);
first=standf;
last=first;
size=0;
} public void addFirst(T x) { if(size==0) {
first=new staffnode(x);
standf.next=first;
standf.pre=first;
first.pre=standf;
first.next=standf;
last.pre=standf;
last.next=standf;
last=first; size++; }
else {
size++;
if(size==2) {
last.pre=first;
}
staffnode first1=new staffnode(x);
standf.next=first1;
first1.next=first;
first1.pre=standf;
first.pre=first1; first=first1;
first.pre=first1.pre;
first.next=first1.next; } }
public void addLast(T x) { if(isEmpty()) {
last=new staffnode(x);
standf.pre=last;
standf.next=last;
last.next=standf;
last.pre=standf;
first=last;
first.next=standf;
first.pre=standf;
size++; } else {
staffnode v=last;
last=new staffnode(x);
last.pre=v;
v.next=last;
last.next=standf;
standf.pre=last;
size++;
} }
public T removeFirst() {
if(size>=1) {
T e=first.item;
first=first.next;
standf.next=first;
size--;
return e;}
else
return null;
} public T getRecursive(int index){
if (index>=size)
return null; else
return getRecursive(first,index,0); } private T getRecursive(staffnode p,int index,int t){
if(t==index) return p.item;
else {
return getRecursive(p.next,index,t+1);
}
}
public T removeLast() {
if(size>=1) { T r=last.item;
last=last.pre;
last.next=standf; size--; return r;
} else return null; } public boolean isEmpty() { if(size==0) return true;
else return false;
}
public T get(int index) {
int t=0; staffnode a=first;
while(a!=standf) { if(index==t) return a.item;
a=a.next;
t++;
}
return null;
}
public void printDeque() {
staffnode p=first; while(p!=standf) {
System.out.print(p.item);
System.out.print(" ");
p=p.next;
}
System.out.print("\n");
}
public int size() {
return size;
} }

2.ArrayDeque

public class ArrayDeque<T> {
private T[] items;
private int begin;
private int size;
private int last;
private double rate;
private int start;
private int s1;
private int s2;
private int end;
public ArrayDeque() {
items = (T[]) new Object[8];
begin=items.length-1;
size=0;
rate=0;
start=0;
last=0;
end=items.length;
s1=0;
s2=0;
} public void addLast(T item) { if(last<=begin&&last<items.length) {
items[last]=item;
size++;
last++;
rate=size/items.length;
s2++;
}
else {
T[] a = (T[]) new Object[items.length*2];
if(s2>0)
System.arraycopy(items, start, a, 0,s2);
if(begin<items.length-1)
System.arraycopy(items, begin+1, a, a.length-s1, s1);
items = a;
end=items.length;
start=0;
last=s2;
begin=items.length-s1-1;
items[last]=item;
last++;
size = size + 1;
s2++;
} }
public void addFirst(T item) { if(begin>=0&&begin>=last) {
items[begin]=item;
begin--;
size++;
s1++;
rate=(double) size/items.length;
}
else {
T[] a = (T[]) new Object[items.length*2];
if(s2>0)
System.arraycopy(items, start, a, 0, s2);
if(s1>0)
System.arraycopy(items, begin+1, a, a.length-s1, s1);
items = a;
end=items.length;
begin=items.length-s1-1;
if(begin>=0&&begin<items.length)
items[begin]=item;
begin--;
start=0;
last=s2;
size = size + 1;
rate=(double) size/items.length;
s1++;
} }
private T d;
public T removeLast() {
if(s2>0) {
s2--;
size--;
last--;
d=items[last];
rate=(double) size/items.length;
if(rate<0.25&&items.length>16) {
recycle();
}
return d; }
else if(s1>0){
s1--;
end--;
size--;
d=items[end];
rate=(double) size/items.length;
if(rate<0.25&&items.length>16) {
recycle();
}
return d;
}
else
return null;
}
private int c;
public T removeFirst() {
if(s1>0) {
s1--;
size--;
begin++;
d=items[begin];
rate=(double) size/items.length;
if(rate<0.25&&items.length>16) {
recycle();
}
return d;
}
else if(s2>0) {
s2--;
d=items[start];
start=start+1;
size--;
rate=(double) size/items.length;
if(rate<0.25&&items.length>16) {
recycle();
}
return d;
}
else return null;
}
private void recycle() {
if (size > 0) {
T[] a = (T[]) new Object[size];
if (s1 > 0)
System.arraycopy(items, begin + 1, a, 0, s1);
if (s2 > 0)
System.arraycopy(items, start, a, s1, s2);
items = a;
s2 = size;
s1 = 0;
begin = items.length - 1;
end = items.length;
start = 0;
last = s2;
}
else {
T[] a = (T[]) new Object[1]; //if(begin+1<=items.length-1)
if (s1 > 0)
System.arraycopy(items, begin + 1, a, 0, s1);
if (s2 > 0)
System.arraycopy(items, start, a, s1, s2);
items = a;
s2 = size;
s1 = 0;
begin = items.length - 1;
end = items.length;
start = 0;
last = s2;
}
}
public int size() {
return size;
}
public T get(int index) {
if(index<s1)
return items[begin+index+1];
if(index>=s1&&index<size)
return items[start+(index-s1)];
else return null;
} public void printDeque() { for(int i=begin+1;i<end;i++) {
System.out.print(items[i]);
System.out.print(' ');
}
for(int j=start;j<last;j++) {
System.out.print(items[j]);
System.out.print(' ');
}
System.out.print("\n");
}
public boolean isEmpty() {
return size==0;
} }

我的失误点总结:
LinkList题目第一次没有注意给设置的pre赋值。每一次改变链表都要注意first,last以及他们之前、之后的节点的pre,next的变化。get递归写法要注意。
第二题总是忘记更新start,end的值只关心了begin和last。
在给addFirst()修改的时候也要对应修改addLast()。
remove函数同理,介于这不是简单的数组,get()函数不能简单采用数组常用的直接返回对应下标的值的办法,要判断index是在哪一部分。

CS61b proj1a的更多相关文章

  1. CS61B sp2018笔记 | Lists

    Lists csdn同作者原创地址 1. IntLists   下面我们来一步一步的实现List类,首先你可以实现一个最简单的版本: public class IntList { public int ...

  2. CS61B HW0

    The Enhanced For Loop public class EnhancedForBreakDemo { public static void main(String[] args) { S ...

  3. Java学习资源整理(超级全面)

    这里整理一些自己平常搜集的比较好的关于Java的学习资源,主要包括博客站点.书籍.课程等. 了解Java最新资讯 这部分主要是了解与Java相关的动态以及信息,能够拓展我们的视野以及寻找一些好的ide ...

  4. Java中的Iterable与Iterator详解

    在Java中,我们可以对List集合进行如下几种方式的遍历: List<Integer> list = new ArrayList<>(); list.add(5); list ...

  5. CS61A hw01

    前不久在知乎上看到CS61A 和CS61B spring18 开课的消息.上去看了一眼,发现真的不错,所有proj hw都可以本地测试!也就是说除了没有课程成绩和官方讨论区和TA解答外,这个课完全可以 ...

  6. 选择排序的实现以及如何编写测试 #CS61B-sp18-3.1

    Selection Sort的思想: 就是在一系列数字中先找到一个最小的放在所有数字的第一个位置上,然后再从余下的数字里面找最小个放在余下的数字里的第一个位置上. 例如: 在这段数据里面我们找到最小的 ...

  7. AList的具体实现 #CS61B-sp18-2.5

    实现一个Array based list,其功能包括获取长度size,添加元素至最后addLast,得到元素get和去除最后一个元素. 设计思路及其实现: 我们都知道在获取数据的时候,直接调用缓存里面 ...

  8. proj0的具体实现 #CS61B-sp18

    https://github.com/Centurybbx/sp18-century/tree/master/proj0 proj0的具体实现在上面的Github中. 在proj0中我明显感受到国外大 ...

  9. ARTS第十二周

    1.Algorithm:每周至少做一个 leetcode 的算法题2.Review:阅读并点评至少一篇英文技术文章3.Tip:学习至少一个技术技巧4.Share:分享一篇有观点和思考的技术文章 以下是 ...

随机推荐

  1. ApacheCN jQuery 译文集 20211121 更新

    创建 jQueryMobile 移动应用 零.序言 一.jQueryMobile 原型制作 二.jQuery Mobile 网站 三.分析.长表单和前端验证 四.QR 码.地理位置.谷歌地图 API ...

  2. 布客&#183;ApacheCN 编程/大数据/数据科学/人工智能学习资源 2020.2

    特约赞助商 公告 我们愿意普及区块链技术,但前提是互利互惠.我们有大量技术类学习资源,也有大量的人需要这些资源.如果能借助区块链技术存储和分发,我们就能将它们普及给我们的受众. 我们正在招募项目负责人 ...

  3. react 没有嵌套关系的组件通讯

    前提准备四个文件,两个子组件:List.List2和一个events.js文件以及一个App.js父组件; 在src目录下创建events.js,里面的内容如下: // events.js(以常用的发 ...

  4. SnapKit

    SnapKit 是 Masonry 框架的团队针对 Swift 全新开发的一套自动布局框架 官方网站:http://snapkit.io github网站:https://github.com/Sna ...

  5. js 计算中英文混合字符串长度

    转载请注明来源:https://www.cnblogs.com/hookjc/ function isChinese(str) {    var lst = /[u00-uFF]/;          ...

  6. 学习jsp篇:jsp简单实例之一注册

    编程环境:IDEA,Tomcat ,JavaEE 实例一.注册 1.先在IDEA建一个web工程(不懂的可以在网上搜,一大堆..)ServletTest,在工程目录下的web目录建一个文件夹regis ...

  7. ARC基本概念

    1.什么是ARC Automatic Reference Counting,自动引用计数,即ARC,可以说是WWDC2011和iOS5所引入 的最大的变革和最激动人心的变化.ARC是新的LLVM 3. ...

  8. 源码推荐 VVebo剥离的TableView绘制

    源码推荐 VVebo剥离的TableView绘制 https://github.com/johnil/VVeboTableViewDemo 此项目由VVebo剥离,希望你能通过这个demo看到我是如何 ...

  9. FLink迟到数据的处理之三

    Flink迟到的数据更新窗口计算结果,窗口销毁后的迟到数据输出到测输出流 主程序: //TODO 使用迟到的数据更新窗口的计算结果 public static void main(String[] a ...

  10. Ubuntu18关机时出现 A stop job is running for ...导致关机很慢

    1. 修改/etc/systemd/system.conf sudo vim /etc/systemd/system.conf 2. 找到一下两行 #DefaultTimeoutStartSec=90 ...