循环链表
package algorithms;
/**
* 链表
* @author henry
* @date 2010-06-04 1:06:22
*/
public class MyLinkedList {
private static MyNode myNode;
private static int size = 0;
public MyLinkedList() {
// TODO Auto-generated constructor stub
myNode = new MyNode();
}
/**
* 插入链表
* @param obj
*/
public void put(Object obj) {
if(size == 0) {
myNode.header = myNode;
myNode.put(obj);
myNode.next = myNode;
size++;
return;
}
MyNode node = new MyNode();
node.header = myNode.header;
node.put(obj);
node.next = myNode;
myNode.header.next = node;
myNode.header = node;
size++;
}
/**
* 获取链表大小
* @return
*/
public int size() {
return size;
}
/**
* 正向获取
* @param idx
* @return
*/
public Object get(int idx) {
if(idx >= size) {
throw new OutOfMemoryError();
}
MyNode mn = myNode;
Object obj = null;
for(int i = 0; i < size; i++) {
if(i == idx) {
obj = mn.get();
break;
}
mn = mn.next;
}
return obj;
}
/**
* 正向删除
* @param idx
* @return
*/
public Object remove(int idx) {
if(idx >= size) {
throw new OutOfMemoryError();
}
MyNode mn = myNode;
Object obj = null;
if(idx == 0) {
obj = mn.get();
mn.next.header = mn.header;
myNode = mn.next;
mn = null;
size--;
return obj;
}
for(int i = 0; i < size; i++) {
if(i == idx) {
obj = mn.get();
mn.header.next = mn.next;
mn.next.header = mn.header;
size--;
mn = null;
break;
}
mn = mn.next;
}
return obj;
}
/**
* 反向删除链表
* @param idx
* @return
*/
public Object reverse(int idx) {
if(idx >= size) {
throw new OutOfMemoryError();
}
MyNode mn = myNode.header;
Object obj = null;
if(idx == 0) {
obj = mn.get();
myNode.header = mn.header;
mn.header.next = mn.header;
mn = null;
size--;
return obj;
}
for(int i = 0; i < size; i++) {
if(i == idx) {
obj = mn.get();
mn.header.next = mn.next;
mn.next.header = mn.header;
size--;
mn = null;
break;
}
mn = mn.header;
}
return obj;
}
/**
* 反向链表
* @param idx
* @return
*/
public Object getReverse(int idx) {
if(idx >= size) {
throw new OutOfMemoryError();
}
MyNode mn = myNode.header;
Object obj = null;
for(int i = 0; i < size; i++) {
if(i == idx) {
obj = mn.get();
break;
}
mn = mn.header;
}
return obj;
}
private static class MyNode {
private MyNode header;
private Object obj;
private MyNode next;
public MyNode() {
// TODO Auto-generated constructor stub
header = null;
obj = null;
next = null;
}
public void put(Object o) {
obj = o;
}
public Object get() {
return this.obj;
}
}
public static void main(String[] args) {
MyLinkedList mll = new MyLinkedList();
for(int i = 0; i < 10; i++) {
mll.put(i + "");
}
for(int i = 0; i < mll.size(); i++) {
String a = (String) mll.get(i);
System.out.print(a + " ");
}
System.out.println();
System.out.println("删除前的大小:" + mll.size());
System.out.println(mll.remove(0));
System.out.println(mll.size());
for(int i = 0; i < mll.size(); i++) {
String a = (String) mll.get(i);
System.out.print(a + " ");
}
System.out.println();
System.out.println(mll.reverse(5));
System.out.println(mll.size());
for(int i = 0; i < mll.size(); i++) {
String a = (String) mll.getReverse(i);
System.out.print(a + " ");
}
}
}
分享到:
相关推荐
二、 善于引导面试官,比如当面试官问到什么问题不懂的时候,避免连问几个都不懂,可以尝试这么说:我***方面的知识比较匮乏,不是很了解,但是我对***的知识还是比较熟习,我觉得***的知识在我们华为性能与算法...
教材和相关的阅读材料中对读者写者问题算法均有描述,但这个算法在不断地有读者流的情况下,写者会被阻塞。编写一个写者优先解决读者写者问题的程序,其中读者和写者均是多个进程,用信号量作为同步互斥机制。
- 指将正整数`n`写成若干正整数之和的方法数。 - 整数划分问题可以通过动态规划的方法高效解决。 10. **错排公式**: - 错排问题是指将`n`个元素重新排列,使得没有元素出现在原来的位置上。 - 解决方法通常是...
使用PV操作为同步机制,可以写出它们能正确并发执行的程序。 在题目22中,理发店里有一位理发师、一把理发椅子和五把供等候理发的顾客坐的椅子。如果没有顾客,理发师便在理发椅上睡觉。当一个顾客到来时,他必须先...
第二版的发布通常意味着作者对原有的内容进行了更新、改进和扩展,以适应不断发展的技术环境。 光盘源代码是书籍配套资源的重要组成部分,它提供了实际操作和学习的操作系统源码,让读者能够直接看到和修改代码,...
RBM是一种二部图模型,其神经元分为可见层和隐藏层,它们之间的连接遵循稀疏性原则。在训练过程中,RBM通过交替的 Gibbs 采样过程(唤醒和睡眠阶段)进行学习,即正向传播(激活隐藏层)和反向传播(恢复可见层)。...
错误校验如CRC(循环冗余校验)或更复杂的校验算法,可确保数据在传输或写入过程中不发生错误。数据冗余如RAID(冗余磁盘阵列)技术,通过数据备份提供容错能力,保障数据的安全性。 读数据的方法则可能涉及预读取...
这样一本C语言的入门书籍,从hello world开始讲起,却在短小的篇幅里,手把手教你写了stdio.h stdlib.h string.h当中大部分例程,实现了二分查找、快速排序、二叉树、哈希表这些重要的数据结构和算法。甚至为了解释...
23. 二级索引结构:这种结构允许文件跨越多个物理块,主索引表、一级和二级索引表分别提供快速定位。 以上知识点详细解释了计算机操作系统中的关键概念,如操作系统功能、并发处理、内存管理、文件系统和进程通信,...
### 计算机四级题库知识点...此部分未完全给出题目,但从已知信息推测,此类结构主要用于文件系统中的索引结构,通过主索引表、一级索引表和二级索引表来管理文件块的物理地址,从而支持更大的文件和更高效的文件访问。
能自己编写内核程序并不意味着可以读懂内核,虽然反过来是一定成立的。读懂别人编写的没有代码的程序,比自己编写更困难一些,但的确是值得的。 第8章 进入Windows内核 96 8.1 开始Windows内核编程 97 8.1.1 ...
1. 操作系统功能:操作系统的主要任务包括管理...23. 二级索引结构:在类UNIX系统中,二级索引结构允许高效访问大文件,主索引表的第11项指向一级索引表,第12项指向二级索引表,每个索引表可存放一定数量的磁盘地址。
调整了程序中关卡对于胜利和失败的算法 几个植物和僵尸做了调整 修改了几个BUG 2010.12.27 对初始界面稍作修改 2010.12.9 添加了“靠天吃饭”小游戏 给领带僵尸添加两种形象 修正辣椒爆炸图片的问题 ...
3. 页面调度算法:包括最优算法(OPYT)、随机算法(RAND)、先进先出算法(FIFO)和最近最少使用方法(LRU)。 4. 作业调度算法:包括先来先服务(FCFS)、短作业优先(SJF)、响应比高者优先(HRN)和优先级调度。
#### 实验二:进程调度实验 ##### 实验目的 - **理解进程调度的基本原理**:熟悉进程调度的各种算法,如优先级调度、时间片轮转等。 - **掌握不同调度策略的特点**:比较不同调度算法的优缺点,了解其应用场景。 ##...
该系统基于YOLOv5(You Only Look Once version 5)框架,这是一种高效的实时目标检测算法,能够快速识别图像中的多个目标物体。在课堂违纪检测场景中,YOLOv5可以精准地识别出学生是否在做与课堂无关的行为,如睡觉...
18. LRU算法:最近最少使用页面替换算法,置换最近最长时间未被访问的页面。 19. 最正确页面置换算法(OPT):在这种情况下,缺页次数为9。 20. 文件物理结构:顺序结构中,文件的逻辑块与物理块按顺序对应。 21....
18. LRU算法:最近最少使用页面置换算法(B)。 19. 最佳页面置换算法(OPT):缺页次数为7(D)。 20. 文件物理结构:顺序结构(A)保持逻辑与物理顺序一致。 21. 提高目录检索效率:限制子目录个数(A)、引入...
### 题目二:睡眠与活动时间比 有一群羊,每只羊每天的睡眠时间和活动时间的比例为3:1。如果这群羊总共有10个小时的睡眠时间,问这群羊有多少只? **解析:** 首先,我们设这群羊有x只。根据题目描述,每只羊每天...
Linux系统的IO数据通道处理涉及多个层次,从用户空间到硬件层,每个层次都扮演着不可或缺的角色。块IO层通过缓存管理、请求合并和IO调度等技术提高了IO效率;中断机制则确保了外部设备能够及时地与CPU通信,处理完成...