Обмен данными между классами - 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);
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.5 из 5