其实java和微软的C#在设计上差不多,C#在设计上应该比java还要高明一点。最近也是一直在看java方面的书和资料,感觉上java其实是另一个作用了云端的更庞大的生态系统,但我这种非计科出身的人,就像机械设计常用的solidworks和creo,感觉不出两者哪个好不好的,但从工业控制上来说,C#应该是好一点的,毕竟配合winform的话,只用关注你的业务逻辑就好了,节省了大量的时间,如果是一;个人操刀并且想快速出活的话,还是首选C#。但这个有什么关系呢,实际上只能是项目的需求选型了什么框架,那你就直接用对应框架上最合适的语言就好了。
还是一样,学习一门新语言,直接过一遍基本语法和字符串,IO,集合常用操作后,直接对常用数据结构进行敲代码,对,就是这样简单粗暴,敲完基础数据结构再看一下JCF对应的源码是怎么实现的。数据结构在上学的时候是没学的,后来是在用自学了C#后买了一本图解数据结构的C#版学会的。后面比较难的AVL、图部分的知识也忘记了,毕竟应用场景少。这方面一直是Ctrl+C和Ctrl+V后修改操作,这次也算是下决心整治一下自己缺失的这一部分。
本次先实现最简单的链表操作,理论上来说,C#和java都是自动GC的语言,所以不能如C++一样操作操作指针字符。不过没关系,在C#中,可以直接使用类模拟对应的链点存储用的节点,可以在java中一样实现。
模拟Node节点
class Node{
public int data;
public Node next;
public Node(int data){
this.data=data;
this.next=null;
}
}
大学的时候其实是选修了C++的,开始在C++中尝试以上代码在C++中是有问题的,因为在C++中,Node next相当Node next=new Node()会无限初始化,但在C#中只是生成了一个4字节的引用,java和C#的性质应该一样的,但就不知道是不是4字节了,有空再找一下资料吧。
初始化链表:
public class LinkedList {
//生成前后节点指针;
private Node first;
private Node last;
public boolean isEmpty(){
return first==null;
}
public void inset(int data){
Node newNode=new Node(data);
if(this.isEmpty()){
//从头插入
first=newNode;
last=newNode;
}
else{
//从后插入
last.next=newNode;
last=newNode;
}
}
//必须获得第一个指针完成遍历
public void print(){
Node node=first;
while (node!=null){
System.out.println(node.data);
node=node.next;
}
}
}
方法的话,是做了非空检查,插入和打印的函数。
做一个Test类:
class LinkedListTest {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader((System.in)));
int data;
System.out.println("请输入3个整数:");
LinkedList list=new LinkedList();
for (int i = 0; i <3; i++) {
int num=Integer.parseInt(bufferedReader.readLine());
//将值插入链表中
list.inset(num);
}
//将值打印出来
list.print();
}
}
可以获得值

















