`
henry2009
  • 浏览: 93511 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

睡不着写算法(二)

    博客分类:
  • java
阅读更多

循环链表

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 + " ");
		}
	}
}
0
3
分享到:
评论

相关推荐

    华为各轮面试总结 性能算法岗位

    二、 善于引导面试官,比如当面试官问到什么问题不懂的时候,避免连问几个都不懂,可以尝试这么说:我***方面的知识比较匮乏,不是很了解,但是我对***的知识还是比较熟习,我觉得***的知识在我们华为性能与算法...

    操作系统实验二:进程、线程之间的同步

    教材和相关的阅读材料中对读者写者问题算法均有描述,但这个算法在不断地有读者流的情况下,写者会被阻塞。编写一个写者优先解决读者写者问题的程序,其中读者和写者均是多个进程,用信号量作为同步互斥机制。

    ACM算法模板集史上最完整收藏版

    - 指将正整数`n`写成若干正整数之和的方法数。 - 整数划分问题可以通过动态规划的方法高效解决。 10. **错排公式**: - 错排问题是指将`n`个元素重新排列,使得没有元素出现在原来的位置上。 - 解决方法通常是...

    1计算机考试算法题二.docx

    使用PV操作为同步机制,可以写出它们能正确并发执行的程序。 在题目22中,理发店里有一位理发师、一把理发椅子和五把供等候理发的顾客坐的椅子。如果没有顾客,理发师便在理发椅上睡觉。当一个顾客到来时,他必须先...

    自己动手写操作系统(第二版)光盘源代码

    第二版的发布通常意味着作者对原有的内容进行了更新、改进和扩展,以适应不断发展的技术环境。 光盘源代码是书籍配套资源的重要组成部分,它提供了实际操作和学习的操作系统源码,让读者能够直接看到和修改代码,...

    dbnmatlab代码-DBN_MNIST_Generating:DBN的唤醒睡眠算法,并基于标签生成数据

    RBM是一种二部图模型,其神经元分为可见层和隐藏层,它们之间的连接遵循稀疏性原则。在训练过程中,RBM通过交替的 Gibbs 采样过程(唤醒和睡眠阶段)进行学习,即正向传播(激活隐藏层)和反向传播(恢复可见层)。...

    行业分类-设备装置-一种写数据和一种读数据的方法和装置.zip

    错误校验如CRC(循环冗余校验)或更复杂的校验算法,可确保数据在传输或写入过程中不发生错误。数据冗余如RAID(冗余磁盘阵列)技术,通过数据备份提供容错能力,保障数据的安全性。 读数据的方法则可能涉及预读取...

    THE C PROGRAMMING LANGUAGE,2nd(ENGLISH TEXT VERSION)

    这样一本C语言的入门书籍,从hello world开始讲起,却在短小的篇幅里,手把手教你写了stdio.h stdlib.h string.h当中大部分例程,实现了二分查找、快速排序、二叉树、哈希表这些重要的数据结构和算法。甚至为了解释...

    全国计算机等级考试四级嵌入式工程师第二套.pdf

    23. 二级索引结构:这种结构允许文件跨越多个物理块,主索引表、一级和二级索引表分别提供快速定位。 以上知识点详细解释了计算机操作系统中的关键概念,如操作系统功能、并发处理、内存管理、文件系统和进程通信,...

    计算机四级题库(二)

    ### 计算机四级题库知识点...此部分未完全给出题目,但从已知信息推测,此类结构主要用于文件系统中的索引结构,通过主索引表、一级索引表和二级索引表来管理文件块的物理地址,从而支持更大的文件和更高效的文件访问。

    天书夜读:从汇编语言到Windows内核编程(完整版 二)

    能自己编写内核程序并不意味着可以读懂内核,虽然反过来是一定成立的。读懂别人编写的没有代码的程序,比自己编写更困难一些,但的确是值得的。  第8章 进入Windows内核 96  8.1 开始Windows内核编程 97  8.1.1 ...

    2015全国计算机等级考试四级嵌入式工程师第2套.pdf

    1. 操作系统功能:操作系统的主要任务包括管理...23. 二级索引结构:在类UNIX系统中,二级索引结构允许高效访问大文件,主索引表的第11项指向一级索引表,第12项指向二级索引表,每个索引表可存放一定数量的磁盘地址。

    植物大战僵尸HTML5源码

    调整了程序中关卡对于胜利和失败的算法 几个植物和僵尸做了调整 修改了几个BUG 2010.12.27 对初始界面稍作修改 2010.12.9 添加了“靠天吃饭”小游戏 给领带僵尸添加两种形象 修正辣椒爆炸图片的问题 ...

    【软考】操作系统知识-基础知识部分.docx

    3. 页面调度算法:包括最优算法(OPYT)、随机算法(RAND)、先进先出算法(FIFO)和最近最少使用方法(LRU)。 4. 作业调度算法:包括先来先服务(FCFS)、短作业优先(SJF)、响应比高者优先(HRN)和优先级调度。

    操作系统实验指导书

    #### 实验二:进程调度实验 ##### 实验目的 - **理解进程调度的基本原理**:熟悉进程调度的各种算法,如优先级调度、时间片轮转等。 - **掌握不同调度策略的特点**:比较不同调度算法的优缺点,了解其应用场景。 ##...

    基于yolov5的学生课堂违纪检测系统.课程设计 完整代码+数据

    该系统基于YOLOv5(You Only Look Once version 5)框架,这是一种高效的实时目标检测算法,能够快速识别图像中的多个目标物体。在课堂违纪检测场景中,YOLOv5可以精准地识别出学生是否在做与课堂无关的行为,如睡觉...

    3月计算机四级《网络工程师》模拟试题(二).doc

    18. LRU算法:最近最少使用页面替换算法,置换最近最长时间未被访问的页面。 19. 最正确页面置换算法(OPT):在这种情况下,缺页次数为9。 20. 文件物理结构:顺序结构中,文件的逻辑块与物理块按顺序对应。 21....

    全国计算机等级考试四级计算机网络第2套试题.pdf

    18. LRU算法:最近最少使用页面置换算法(B)。 19. 最佳页面置换算法(OPT):缺页次数为7(D)。 20. 文件物理结构:顺序结构(A)保持逻辑与物理顺序一致。 21. 提高目录检索效率:限制子目录个数(A)、引入...

    面试中的IQ问题,可以看看

    ### 题目二:睡眠与活动时间比 有一群羊,每只羊每天的睡眠时间和活动时间的比例为3:1。如果这群羊总共有10个小时的睡眠时间,问这群羊有多少只? **解析:** 首先,我们设这群羊有x只。根据题目描述,每只羊每天...

    Linux IO数据通道我理解

    Linux系统的IO数据通道处理涉及多个层次,从用户空间到硬件层,每个层次都扮演着不可或缺的角色。块IO层通过缓存管理、请求合并和IO调度等技术提高了IO效率;中断机制则确保了外部设备能够及时地与CPU通信,处理完成...

Global site tag (gtag.js) - Google Analytics