public DbNode(DbNode <Button> next) { //使用 default 关键字,此关键字对于引用类型会返回空,对于数值类型会返回零。 //对于结构,此关键字将返回初始化为零或空的每个结构成员,具体取决于这些结构是值类型还是引用类型 this._data = default(Button); this._next = next; this._prev = null; }
// 构造函数 6个 public DbNode(Button data, int type, double time, DbNode <Button> prev, DbNode <Button> next) { this._data = data; this._type = type; this._time = time; this._prev = prev; this._next = next; }
/// <summary> /// 返回链表的长度 /// </summary> /// <returns></returns> public int Count() { DbNode <Button> p = Head; int length = 0; while (p != null) { length++; p = p.Next; } return(length); }
/// <summary> /// 在链表最后插入node /// </summary> /// <param name="item"></param> public void AddLast(DbNode <Button> item) { DbNode <Button> newNode = item; DbNode <Button> p = new DbNode <Button>(); if (Head == null) { Head = newNode; return; } p = Head; //如果head不为空,head就赋值给第一个节点 while (p.Next != null) { p = p.Next; } p.Next = newNode; newNode.Prev = p; }
/// <summary> /// 在位置i后插入node Button /// </summary> /// <param name="item"></param> /// <param name="i"></param> public void AddAfter(Button item, int i) { if (IsEmpty() || i < 0) { Console.WriteLine("The double linked list is empty or the position is uncorrect."); return; } if (0 == i) //在头之后插入元素 { DbNode <Button> newNode = new DbNode <Button>(item); newNode.Next = Head.Next; Head.Next.Prev = newNode; Head.Next = newNode; newNode.Prev = Head; return; } DbNode <Button> p = Head; //p指向head int j = 0; while (p != null && j < i) { p = p.Next; j++; } if (j == i) { DbNode <Button> newNode = new DbNode <Button>(item); newNode.Next = p.Next; if (p.Next != null) { p.Next.Prev = newNode; } newNode.Prev = p; p.Next = newNode; } else { Console.WriteLine("The position is uncorrect."); } }
/// <summary> /// 根据元素的值查找索引 /// </summary> /// <param name="value"></param> /// <returns></returns> public int IndexOf(Button value) { if (IsEmpty()) { Console.WriteLine("The list is empty."); return(-1); } DbNode <Button> p = new DbNode <Button>(); p = Head; int i = 0; while (p.Next != null && !p.Data.Equals(value))//查找value相同的item { p = p.Next; i++; } return(i); }
/// <summary> /// 移除指定位置的node /// </summary> /// <param name="i"></param> /// <returns></returns> public Button RemoveAt(int i) { if (IsEmpty() || i < 0) { Console.WriteLine("The double linked list is empty or the position is uncorrect."); return(default(Button)); } DbNode <Button> q = new DbNode <Button>(); if (0 == i) { q = Head; Head = Head.Next; Head.Prev = null;//删除掉了第一个元素 return(q.Data); } DbNode <Button> p = Head; int j = 0; while (p.Next != null && j < i) { j++; q = p; p = p.Next; } if (i == j) //? { p.Next.Prev = q; q.Next = p.Next; return(p.Data); } else { Console.WriteLine("The position is uncorrect."); return(default(Button)); } }
/// <summary> /// 在位置i前插入node Button /// </summary> /// <param name="item"></param> /// <param name="i"></param> public void AddBefore(DbNode <Button> item, int i) { if (IsEmpty() || i < 0) { Console.WriteLine("The double linked list is empty or the position is uncorrect."); return; } if (0 == i) //在头之前插入元素 { DbNode <Button> newNode = item; newNode.Next = Head; //把头改成第二个元素 Head.Prev = newNode; Head = newNode; //把新元素设置为头 return; } DbNode <Button> n = Head; DbNode <Button> d = new DbNode <Button>(); int j = 0; while (n.Next != null && j < i) { d = n; //把d设置为头 n = n.Next; j++; } { if (j == i) { DbNode <Button> newNode = item; d.Next = newNode; newNode.Prev = d; newNode.Next = n; n.Prev = newNode; } } }
//新建任务 private void skinButton1_Click(object sender, EventArgs e) { n++; if (n <= 3) { string Title = ""; //声明一个字符串变量,用于生成新增选项卡的名称 foreach (Control c in tabControl1.TabPages) { if (c.Text == "unknown1") { b[1] = 1; } if (c.Text == "unknown2") { b[2] = 1; } if (c.Text == "unknown3") { b[3] = 1; } } if (b[1] != 0) { if (b[2] != 0) { Title = "unknown3"; } else { Title = "unknown2"; } } else { Title = "unknown1"; } TabPage MyTabPage = new TabPage(Title);//创建TabPage对象 MyTabPage.BackColor = Color.White; //使用TabControl控件的TabPages 属性的Add方法添加新的选项卡 tabControl1.TabPages.Add(MyTabPage); tabControl1.SelectedTab = MyTabPage; MyTabPage.Paint += new PaintEventHandler(tabPage1_Paint); //设置TabPages界面可以拖入控件 tabControl1.SelectedTab.DragDrop += new DragEventHandler(tabPage1_DragDrop); tabControl1.SelectedTab.DragEnter += new DragEventHandler(tabPage1_DragEnter); tabControl1.SelectedTab.AllowDrop = true; //在初始页面生成开始、结束按钮 Button START = new Button(); START.Image = button1.Image; START.Size = new Size(80, 80); START.Location = new Point(83, 43); MyTabPage.Controls.Add(START); START.MouseDown += new MouseEventHandler(OnMouseDown); START.MouseMove += new MouseEventHandler(OnMouseMove); DbNode <Button> start = new DbNode <Button>(START, 0, 0, null, null); start.X = START.Location.X; start.Y = START.Location.Y; k[l].Head = start; Button END = new Button(); END.Image = button2.Image; END.Size = new Size(80, 80); END.Location = new Point(83, 343); MyTabPage.Controls.Add(END); END.MouseDown += new MouseEventHandler(OnMouseDown); END.MouseMove += new MouseEventHandler(OnMouseMove); DbNode <Button> end = new DbNode <Button>(END, 1, 0, null, null); end.X = END.Location.X; end.Y = END.Location.Y; k[l].AddLast(end); /* dblink.AddLast(END);*/ } else { MessageBox.Show("最多只能拥有三个选项卡!"); } }
public int buttonnumber; //buttonnumber 是判断 mousedown 时所在的按钮 private void tabPage1_DragDrop(object sender, DragEventArgs e) { //拖放完毕之后,自动生成新控件 Button btn = new Button(); btn.Size = move.Size; btn.Location = tabControl1.SelectedTab.PointToClient(new Point(e.X, e.Y)); //用这个方法计算出客户端容器界面的X,Y坐标。否则直接使用X,Y是屏幕坐标 tabControl1.SelectedTab.Controls.Add(btn); btn.ContextMenuStrip = contextMenuStrip1; btn.MouseDown += new MouseEventHandler(OnMouseDown); btn.MouseMove += new MouseEventHandler(OnMouseMove); switch (buttonnumber) { case 2: { btn.Image = Properties.Resources.move; DbNode <Button> a = new DbNode <Button>(btn, 2, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 3: { btn.Image = Properties.Resources.back; DbNode <Button> a = new DbNode <Button>(btn, 3, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 4: { btn.Image = Properties.Resources.turnleft; DbNode <Button> a = new DbNode <Button>(btn, 4, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 5: { btn.Image = Properties.Resources.turnright; DbNode <Button> a = new DbNode <Button>(btn, 5, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 6: { btn.Image = Properties.Resources.follow; DbNode <Button> a = new DbNode <Button>(btn, 6, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 7: { btn.Image = Properties.Resources.stop; DbNode <Button> a = new DbNode <Button>(btn, 7, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } //延时 delay case 8: { btn.Image = Properties.Resources.延时; DbNode <Button> a = new DbNode <Button>(btn, 8, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 10: { btn.Image = Properties.Resources.循环开始11; DbNode <Button> a = new DbNode <Button>(btn, 10, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 11: { btn.Image = Properties.Resources.循环开始21; DbNode <Button> a = new DbNode <Button>(btn, 11, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 12: { btn.Image = Properties.Resources.循环开始31; DbNode <Button> a = new DbNode <Button>(btn, 12, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 13: { btn.Image = Properties.Resources.无限循环开始; DbNode <Button> a = new DbNode <Button>(btn, 13, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 20: { btn.Image = Properties.Resources.循环结束1; DbNode <Button> a = new DbNode <Button>(btn, 20, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 21: { btn.Image = Properties.Resources.循环结束2; DbNode <Button> a = new DbNode <Button>(btn, 21, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 22: { btn.Image = Properties.Resources.循环结束3; DbNode <Button> a = new DbNode <Button>(btn, 22, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 23: { btn.Image = Properties.Resources.无限循环结束; DbNode <Button> a = new DbNode <Button>(btn, 23, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 30: { btn.Image = Properties.Resources.小车快速左转; DbNode <Button> a = new DbNode <Button>(btn, 30, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 31: { btn.Image = Properties.Resources.小车快速右转; DbNode <Button> a = new DbNode <Button>(btn, 31, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 32: { btn.Image = Properties.Resources.小车慢速做转; DbNode <Button> a = new DbNode <Button>(btn, 32, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 33: { btn.Image = Properties.Resources.小车慢速右转; DbNode <Button> a = new DbNode <Button>(btn, 33, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 41: { btn.Image = Properties.Resources.电机停转; DbNode <Button> a = new DbNode <Button>(btn, 41, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 42: { btn.Image = Properties.Resources.电机正转; DbNode <Button> a = new DbNode <Button>(btn, 42, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 43: { btn.Image = Properties.Resources.电机反转; DbNode <Button> a = new DbNode <Button>(btn, 43, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 44: { btn.Image = Properties.Resources.左电机转动; DbNode <Button> a = new DbNode <Button>(btn, 44, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 45: { btn.Image = Properties.Resources.右电机转动; DbNode <Button> a = new DbNode <Button>(btn, 45, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 50: { btn.Image = Properties.Resources.蜂鸣; DbNode <Button> a = new DbNode <Button>(btn, 50, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 51: { btn.Image = Properties.Resources.乐曲1; DbNode <Button> a = new DbNode <Button>(btn, 51, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 52: { btn.Image = Properties.Resources.乐曲2; DbNode <Button> a = new DbNode <Button>(btn, 52, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 53: { btn.Image = Properties.Resources.乐曲3; DbNode <Button> a = new DbNode <Button>(btn, 53, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 54: { btn.Image = Properties.Resources.乐曲4; DbNode <Button> a = new DbNode <Button>(btn, 54, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 55: { btn.Image = Properties.Resources.乐曲5; DbNode <Button> a = new DbNode <Button>(btn, 55, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 56: { btn.Image = Properties.Resources.乐曲6; DbNode <Button> a = new DbNode <Button>(btn, 56, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } //灯光控制 case 60: { btn.Image = Properties.Resources.前进等; DbNode <Button> a = new DbNode <Button>(btn, 60, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 61: { btn.Image = Properties.Resources.倒车灯; DbNode <Button> a = new DbNode <Button>(btn, 61, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 62: { btn.Image = Properties.Resources.亮左转灯; DbNode <Button> a = new DbNode <Button>(btn, 62, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 63: { btn.Image = Properties.Resources.亮右转灯; DbNode <Button> a = new DbNode <Button>(btn, 63, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 64: { btn.Image = Properties.Resources.流水灯; DbNode <Button> a = new DbNode <Button>(btn, 64, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 65: { btn.Image = Properties.Resources.停止灯; DbNode <Button> a = new DbNode <Button>(btn, 65, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 66: { btn.Image = Properties.Resources.顺时针亮一圈; DbNode <Button> a = new DbNode <Button>(btn, 66, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 67: { btn.Image = Properties.Resources.逆时针亮一圈; DbNode <Button> a = new DbNode <Button>(btn, 67, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 68: { btn.Image = Properties.Resources.小灯闪烁一次; DbNode <Button> a = new DbNode <Button>(btn, 68, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } case 69: { btn.Image = Properties.Resources.摩斯电码__2_; DbNode <Button> a = new DbNode <Button>(btn, 69, 0); k[l].AddBefore(a, k[l].Count() - 1); break; } } }
public DbNode(Button data) { this._data = data; this._prev = null; this._next = null; }
/// <summary> /// 打印双向链表的每个元素 /// </summary> public string Print() { string s = ""; DbNode <Button> current = new DbNode <Button>(); current = this.Head; bool a = false, b = false, c = false, d = false; DbNode <Button> recycle1 = new DbNode <Button>(); DbNode <Button> recycle2 = new DbNode <Button>(); DbNode <Button> recycle3 = new DbNode <Button>(); DbNode <Button> recycle4 = new DbNode <Button>(); while (current != null) { if (current.Type != 10 && current.Type != 11 && current.Type != 12 && current.Type != 13 && current.Type != 20 && current.Type != 21 && current.Type != 22 && current.Type != 23) { s += current.Type + " " + current.Time + "\r\n"; current = current.Next; } else { if (current.Type == 10) { a = true; recycle1 = current.Next; current = current.Next; } if (current.Type == 11) { b = true; recycle2 = current.Next; current = current.Next; } if (current.Type == 12) { c = true; recycle3 = current.Next; current = current.Next; } if (current.Type == 13) { d = true; recycle4 = current.Next; current = current.Next; } if (current.Type == 20) { if (a == true) { a = false; current = recycle1; s += current.Type + " " + current.Time + "\r\n"; current = current.Next; } else { current = current.Next; } } if (current.Type == 21) { if (b == true) { b = false; current = recycle2; s += current.Type + " " + current.Time + "\r\n"; current = current.Next; } else { current = current.Next; } } if (current.Type == 22) { if (c == true) { c = false; current = recycle3; s += current.Type + " " + current.Time + "\r\n"; current = current.Next; } else { current = current.Next; } } if (current.Type == 23) { if (d == true) { current = recycle4; s += current.Type + " " + current.Time + "\r\n"; current = current.Next; } else { current = current.Next; } } } } return(s); }
/// <summary> /// 清空双链表 /// </summary> public void Clear() { this.Head = null; }
//构造函数 public DbLinkedList() { Head = null; }
public DbNode() { this._data = default(Button); this._prev = null; this._next = null; }