Обмен данными между классами - C#
Формулировка задачи:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication10 { public partial class Form1 : Form { Tree tr; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Random rnd = new Random(); for (int i = 0; i < 100; i++) { listBox1.Items.Add(rnd.Next(1, 1000)); } } private void button1_Click(object sender, EventArgs e) { tr = new Tree(null, null, null); for (int i = 0; i < 100; i++) { tr.Insert(new Data(int.Parse(listBox1.Items[i].ToString()), "")); } } private void button2_Click(object sender, EventArgs e) { tr.traverse(tr); } } //////////////////////// class Data { public int k; public string v; public Data(int nk, string nv) { k = nk; v = nv; } } class Tree { public List<int> lst = new List<int>(); Data data; Tree left; Tree right; public Tree(Data nd, Tree nl, Tree nr) { data = nd; left = nl; right = nr; } public void Insert(Data ndata) { if (this.data == null) { // MessageBox.Show("V " + ndata.k.ToString()); this.data = ndata; } else { if (ndata.k < this.data.k) { if (left == null) { //MessageBox.Show("Пишу лево " + ndata.k.ToString()); this.left = new Tree(ndata, null, null); } else { //MessageBox.Show("Перехожу лево " + ndata.k.ToString()); left.Insert(ndata); } } else if (ndata.k >= this.data.k) { if (right == null) { // MessageBox.Show("Пишу право " + ndata.k.ToString()); this.right = new Tree(ndata, null, null); } else { //MessageBox.Show("Перехожу право " + ndata.k.ToString()); right.Insert(ndata); } } else throw new Exception("Узел уже существует");//no fuckin' way! } } public void traverse(Tree visitor) { if (left != null) { left.traverse(left); } MessageBox.Show(this.data.k.ToString()); //данные this.data.k.ToString() надо добавить в листбокс в форме if (right != null) { right.traverse(right); } } } //////////////////////////////// }
Решение задачи: «Обмен данными между классами»
textual
Листинг программы
using System; public interface TreeVisitor<T> where T : IComparable<T> { void Visit(Tree<T> node); } public class KeyPrinter<T> : TreeVisitor<T> where T : IComparable<T> { public void Visit(Tree<T> tree) { Console.Write("{0} ", tree.Key); } } public class Tree<T> where T: IComparable<T> { public Tree(T key) { this.Key = key; } public Tree<T> Left { get; set; } public Tree<T> Right { get; set; } public T Key { get; set; } public void Insert(Tree<T> tree) { if (tree.Key.CompareTo(this.Key) < 0) if (Left != null) Left.Insert(tree); else Left = tree; else if (Right != null) Right.Insert(tree); else Right = tree; } public void Traverse(TreeVisitor<T> visitor) { if (Left != null) Left.Traverse(visitor); visitor.Visit(this); if (Right != null) Right.Traverse(visitor); } } class Program { static void Main(string[] args) { Tree<int> tree = new Tree<int>(7); tree.Insert(new Tree<int>(5)); tree.Insert(new Tree<int>(9)); tree.Traverse(new KeyPrinter<int>()); Console.ReadKey(true); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д