数据增加:public void add(Object data)

数据增加:public void add(Object data)

如果要想在链表之中实现一个数据的增加操作,则应该首先在链表里面提供有一个追加方法,而这个追加方法的参数应该是Object类型.

1.在Link类中追加新的方法定义。 

class Link{//负责链表的操作  
	//将Node定义为内部类,表示Node类只为Link类服务
	private class Node{//负责数据与节点关系的匹配
private Object data;//保存节点的数据	
	private Node next;//保存下一个节点
	public Node(Object data) {
		this.data=data;
	}
	}
	//-----------------以下为Link类定义-------------
	public void add(Object data) {
		if(data==null) {//认为追加规定不允许存放空值
			return ;//方法结束
		}
	}
}

2.那么该如何进行数据的保存呢?应该首先定义个根节点,才可以陆续添加后面的子节点。这个节点的类型一定就是Node,则应该在Link类里面追加有一个Node类的属性。   

private Node root;//属于根节点,没有根节点就无法进行数据的保存

3.后续节点操作:

class Link{//负责链表的操作
	//将Node定义为内部类,表示Node类只为Link类服务
        private class Node{//负责数据与节点关系的匹配
        private Object data;//保存节点的数据	
	    private Node next;//保存下一个节点
	    public Node(Object data) {
		 this.data=data;
	                             }
	    //第一次调用:this=Link.root
	    //第二次调用:this=Link.root.next
	    //第三次调用:this=Link.root.next.next
	    public void addNode(Node newNode) {//处理节点关系
	    	if(this.next==null) {//当前节点下一个为空,表示可以保存 
	    		this.next=newNode;
	    	}else {//当前节点的下一个不为空
	    		this.next.addNode(newNode);
	    		
	    	      }
	                                      }
	    }
//-----------------以下为Link类定义-------------
          private Node root;
//root存第一个数据,属于根节点,没有根节点就无法进行数据的保存
	public void add(Object data) {
		if(data==null) {//人为追加规定不允许存放空值
			return ;//方法结束
		}
        //如果想要进行数据的保存,那么必须将数据封装在Node节点类里面 
		//如果没有封装,则无法确认好节点的先后顺序 
		Node newNode =new Node(data);
    if(this.root==null) {//当前并没并没有根节点
	this.root=newNode;//第一个节点设置为根节点 
}else {//根节点已经存在了
//应该把此时的节点顺序的处理交给Node类自己完成
	this.root.addNode(newNode); 
	
}	  
}

}

public class TestLinkDemo{

	public static void main(String[] args) {
	  Link all=new Link();
	  all.add("hello");
	  all.add("world");
	  all.add("123");
	}
}     

这个时候理论上如果内存够大,那么可以存放的内容就非常多了,而整个代码的实现关键就在于Node类负责实现数据保存和节点关系匹配

  

如果觉得上面的解释太过系统化 下面的可以考虑下 更方便理解 注释

class Link{//负责链表的操作 给客户调用的
	//Link操作Node类 主要干数据保存和节点配置
//☆Link类负责给用户提供该数据,负责操作Node节点关系
	//将Node定义为内部类,表示Node类只为Link类服务
	private class Node{//只负责节点的问题
		private Object data;//保存数据	
	    private Node next;//保存下一个节点
	    public Node(Object data) {
	     	this.data=data;
	                             }
	//第一次调用:this=Link.root
	    //第二次调用:this=Link.root.next
	    //第三次调用:this=Link.root.next.next
	public void addNode(Node newNode) {//处理节点关系
		 if(this.next==null) {//直到找到空的地方才是递归的结束
			 //当前节点下一个为空,表示可以保存 
		 this.next=newNode;
		 }else {//当前节点的下一个不为空,就去再看下下个是否为空,就是递归
			 //让此时的下一个next再调用方法然后传newNode(封装着data的数据)
			 this.next.addNode(newNode);
		 }
		
	}
	} 
	//-----------------以下为Link类定义-------------
private Node root;//没有根节点就无法进行数据的保存
	//数据增加:
	public void add(Object data) {
	if(data==null) {//人为追加规定不允许存放空值
		return ;//表示方法结束
	}
//如果想要进行数据保存,那么碧玺将数据封装在节点类之中
//如果没有封装则无法确认好节点的先后顺序	
	Node newNode =new Node(data);
	if(this.root==null) {//当前并没有根节点
		this.root=newNode;//第一个节点设置为根节点
	}else {//根节点已经存在了
		//所以应该把此时的节点顺序的处理交给Node类自己完成
		this.root.addNode(newNode);//第一次执行addNode
	}
	}

}
public class TestLinkDemo {


	public static void main(String[] args) {
   	}
	
}


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
public partial class Form1 : Form { public Form1() { InitializeComponent(); } SerialPort port1 = new SerialPort(); string InputData = String.Empty; delegate void SetTextCallback(string text); private void Port_Select() {//获取机器中的串口地址 string[] ports = SerialPort.GetPortNames(); foreach (string port in ports) { comboBox1.Items.Add(port); } } private void Form1_Load_1(object sender, EventArgs e) { Port_Select(); this.comboBox1.SelectedIndex = 0; this.comboBox2.SelectedIndex = 0; } private void button1_Click(object sender, EventArgs e) { if (button1.Text == "关闭串口") //当要关闭串口的时候 { port1.DiscardOutBuffer(); port1.DiscardInBuffer(); port1.Close(); button1.Text = "打开串口"; label3.Text = "串口当前状况:未打开"; comboBox1.Enabled = true; comboBox2.Enabled = true; } else if (button1.Text == "打开串口") //当要打开串口的时候 { try { port1.PortName = comboBox1.SelectedItem.ToString(); port1.BaudRate = Convert.ToInt32(comboBox2.SelectedItem); port1.DataBits = 8; port1.RtsEnable = true; port1.Open(); port1.DiscardOutBuffer(); port1.DiscardInBuffer(); button1.Text = "关闭串口"; comboBox1.Enabled = false; comboBox2.Enabled = false; label3.Text = "串口:" + comboBox1.SelectedItem.ToString() + " 波特率:" + comboBox2.SelectedItem.ToString() + " 数据位:8 "; } catch { button1.Text = "打开串口"; label3.Text = "串口:" + comboBox1.SelectedItem.ToString() + "打开失败"; MessageBox.Show("该串口无法打开"); } } } 资源中部分代码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值