在下决定之前,向已经在工作岗位上的前辈请教过考研还是工作的问题。我知道只有这些人才最有资格讨论这个问题,当然出来研究领域的大牛。我也知道会有很多不同的答案,甚至有的非常的绝对或者说极端,但我更相信一句话:事在人为!
我决定考研了,理由我这里就不多说了。此时此刻的该受是自己的学习能力还不够,研究问题的脑袋还没有成熟,我向变得更加冷静,更加沉着,力求达到自己的考研目的。就像有的前辈说的:除了基本外,争取有利于自己事业的一技之长。
但决定归决定,现在还没有到冲刺的时候,所以现在仍然是提高自己基础的时候,特别是这个时候自己已经有了一定基础,有更有利的条件自己去研究解决一些问题。
为了增强自己的学习能里,于是在认真学习这几门专业课之时候,自学一下java数据结构(学院开的是用c描述的,多少有差别),争取早点学完。
今天做完了第一个程序:链表的基本功能:
package comeon.feiqiang;
/**
* this class is for a Node Oprator
* include tow menber variables data and link
* with the methods provided,you can create a new IntNode with two parameters,
* create a new Node before the current Node,create a copy with head,create a copy with head and tail
* get
*
*/
public class IntNode {
public int data;
public IntNode link;
public IntNode(int initialData, IntNode initialLink) {
data = initialData;
link = initialLink;
}
public void addNodeBefore(int element) {
link = new IntNode(element, link);
}
/**
* @param head
* @return the head of the list
*/
public static IntNode listCopy(IntNode head) {
IntNode answer = null;
if (head == null) {
return null;
}
IntNode cursor = head;
answer = new IntNode(head.data, null);
IntNode tail = answer;
while (cursor.link != null){
cursor = cursor.link;
tail.link=new IntNode(cursor.data, tail.link);
tail = tail.link;
}
return answer;
}
/**
* @param IntNode
* source
* @return an array with the head and the tail of a copy of a source list
*/
public static IntNode[] copyWithDail(IntNode source) {
IntNode copyHead = null;
IntNode copyTail = null;
IntNode[] answer = new IntNode[2];
if (source == null) {
return answer;
}
copyHead = new IntNode(source.data, null);
copyTail = copyHead;
source = source.link;
while (source != null) {
copyTail.link = new IntNode(source.data, copyTail.link);
source = source.link;
copyTail = copyTail.link;
}
answer[0] = copyHead;
answer[1] = copyTail;
return answer;
}
/**
* @param head
* @return the length of the list
*/
public static int listLength(IntNode head) {
int answer = 0;
IntNode cursor = head;
while (cursor != null) {
answer++;
cursor = cursor.link;
}
return answer;
}
/**
*
* @param start
* @param end
* @return a copy of the current list from the start Node to the end Node
*/
public static IntNode[] listPart(IntNode start, IntNode end) {
IntNode copyHead = null;
IntNode copyTail = null;
IntNode answer[] = new IntNode[2];
if (start == null) {
throw new IllegalArgumentException("start is null");
}
if (end == null) {
throw new IllegalArgumentException("end is null");
}
copyHead = new IntNode(start.data, null);
copyTail = copyHead;
while (start != end) {
start = start.link;
if (start == null) {
throw new IllegalArgumentException(
"end node was not found on this list");
}
copyTail.link = new IntNode(start.data, copyTail.link);
copyTail = copyTail.link;
}
answer[0] = copyHead;
answer[1] = copyTail;
return answer;
}
/**
* @param head
* @param position
* @return the IntNode on the position
*/
public static IntNode listPosition(IntNode head, int position) {
if (position <= 0) {
throw new IllegalArgumentException("position is not positive");
}
IntNode cursor = head;
for (int i = 1; i < position && cursor != null; i++) {
cursor = cursor.link;
}
return cursor;
}
/**
* @param IntNode
* head
* @param IntNode
* target
* @return the IntNode at the data of target
*/
public static IntNode listSearch(IntNode head, int target) {
IntNode cursor = head;
while (cursor != null) {
if (cursor.data == target) {
return cursor;
}
cursor = cursor.link;
}
return null;
}
public static void print(IntNode head) {
IntNode cursor = head;
while (cursor != null) {
System.out.println(cursor.data);
cursor = cursor.link;
}
}
}
分享到:
相关推荐
在计算机科学领域,链表是一种基础且重要...`MyLinkList.java`文件中的实现可能包括了链表节点和链表操作的封装,以及使用双指针解决特定问题的逻辑。理解和掌握这些知识对于进行更高级的算法和数据结构学习至关重要。
本资源摘要信息对 C 语言考研试题和历年考试题进行了详细的知识点总结,涵盖了线性表和数据结构的基本概念、顺序存储结构和链接存储结构、链表的类型、静态链表、线性表的操作和时间复杂度等知识点,对考研考生和...
这个操作涉及到链表节点的反向遍历和重新链接,通过一个指针p从链表的第二个节点开始,不断地跳过偶数位置的节点并调整指针关系,最终实现节点的重排。 以上知识点涵盖了链表的基本操作,包括连接、删除、合并、...
在计算机科学中,数据结构是程序设计的基础,而顺序表和链表是两种常见的线性数据结构。它们各自有其特点和应用场景,了解并掌握它们的比较有助于我们更有效地进行算法设计和系统优化。 顺序表,又称为数组,是将...
在准备华中科技大学人工智能与自动化学院的考研复试中,C语言是重要的考核科目之一,尤其在涉及字符串、结构体和链表这些核心概念时。以下是对这些知识点的详细阐述: 一、C语言基础 C语言是一种强大的编程语言,...
PPT会介绍链表节点的定义、链表的创建、遍历、插入和删除操作。 5. **栈与队列**:栈是后进先出(LIFO)的数据结构,常用于表达式求解、递归调用等;队列是先进先出(FIFO)的数据结构,常见于任务调度、缓冲区管理...
在C语言中,我们通常定义一个结构体来表示链表节点: ```c typedef struct Node { int data; // 数据域 struct Node* next; // 指针域 } Node; ``` 接下来,我们可以编写一些基本操作的函数原型: ```c // 创建...
数据结构可以分为两大类:线性结构和非线性结构。线性结构包括数组、链表、栈和队列,它们的数据元素按照特定顺序排列;非线性结构如树、图、哈希表等,其数据元素之间的关系更为复杂,可能是一对多或无序的关系。 ...
链表是由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表分为单链表、双链表和循环链表等,相比于数组,链表在插入和删除操作上更灵活,但在随机访问上较慢。 栈是一种后进先出(LIFO)的数据结构,...
【考研408数据结构算法背诵】是针对计算机科学考研者准备的资料,涵盖了408考试中常见的数据结构和算法题目。这份资料重点在于帮助考生熟练掌握和记忆各种数据结构的操作,如线性表、树等,以及相应的算法实现。 在...
- **12.2 链式存储结构**:使用链表来表示线性表,每个元素称为节点,节点包含数据部分和指向下一个节点的指针。链表可以分为单向链表、双向链表和循环链表等。 - **1.2.3 线性表的应用**:线性表被广泛应用于各种...
链表包括单链表、双链表和循环链表等变体,它们在代码中通常通过指针链接节点。 2. 数组:数组是最基础的数据结构,提供了随机访问和快速访问的优势,但插入和删除操作较慢。数组可以是一维、二维或多维的,分别...
王道计算机考研数据结构线性表代码 顺序表 单链表 双链表 循环链表 ...带头节点和不带头节点链表的初始化 链表的节点增加、删除节点、销毁链表、双链表正向打印逆向打印! 静态链表的初始化以及插入操作
2. **链表**:链表是由一系列节点组成的数据结构,每个节点包含数据和指向下一个节点的指针。链表分为单链表、双链表和循环链表,它们的主要操作包括插入、删除和遍历。考研时可能会考察链表的逆序、合并等题目。 3...
而双链表可以通过前后指针方便地访问链表中的任意节点。 **总结** 通过对这份资料中提供的选择题、程序分析题、简答题和编程题的分析,我们可以看到计算机考研科目831主要涵盖了C语言的基础语法、数据结构(如栈、...
将一个数组中的元素顺序转换为另一个数组中的顺序,可以利用数组的索引和链表的节点指针操作来实现。这在算法中常用于解决特定的排列或顺序重组问题。 以上知识点都是数据结构中比较基础且重要的内容,对于考研学生...
在链式存储结构中,通常采用二叉链表来表示二叉树,每个节点包含一个数据域(TElemType data)和两个指向子节点的指针域(lchild 和 rchild)。 2. **二叉树遍历** - **先序遍历**:访问根节点 -> 递归遍历左子树 ...
哈工程数据结构的考研内容通常涵盖数组、链表、栈、队列、树、图、排序算法和查找算法等多个核心主题。 1. **数组**:数组是最基本的数据结构,它是一组相同类型元素的集合,通过索引进行访问。理解数组的存储机制...
- 链表的操作:例如对链表节点的增加、删除、定位等操作,题号3涉及到了对链表节点的指针调整。 - 时间复杂度的分析:题号1和9涉及到对特定算法或操作的时间复杂度进行分析和选择。例如,判断一个算法的时间复杂度...