コード例 #1
0
 public void SetList(SingleLinkedList list)
 {
     SuspendLayout();
     this.list = list;
     Node p = list.First;
     while(p!=null){
         TextBox tb = new TextBox();
         tb.Text = p.Info.ToString();
         tb.Width = 30;
         this.itemsTlp.Controls.Add(tb);
         p = p.Link;
     }
     ResumeLayout();
 }
コード例 #2
0
        public SingleLinkedList GetList()
        {
            SingleLinkedList list = new SingleLinkedList();
            try {

            foreach(TextBox c in itemsTlp.Controls) {
                list.InsertAfterLast(int.Parse(c.Text));

            }
            }
                catch {}

            // TODO: обновление поля list при добавлении нового элемента в список, а не при вызове GetList
            this.list = list;
            return list;
        }
コード例 #3
0
        void Button1Click(object sender, EventArgs e)
        {
            this.ouput.Clear();
            try {
                SingleLinkedList sl1;
                SingleLinkedList sl2;
                SingleLinkedList sl3;

                sl1 = listView1.GetList();
                sl2 = listView2.GetList();
                sl3 = listView3.GetList();

                if (sl1.isEmpty && sl2.isEmpty && sl3.isEmpty) {

                    if (textBox1.Text.Length!=0 && textBox2.Text.Length!=0 && textBox3.Text.Length!=0){
                        sl1 = new SingleLinkedList(textBox1.Text.Trim());
                        sl2 = new SingleLinkedList(textBox2.Text.Trim());
                        sl3 = new SingleLinkedList(textBox3.Text.Trim());
                    }
                }

                else {

                    sl1 = new SingleLinkedList("1 1 1 1 2 1 1 2 3");
                    sl2 = new SingleLinkedList("1 1 2");
                    sl3 = new SingleLinkedList("0");
                }

            SuspendLayout();
            ouput.Text += sl1.ToString();

            sl1.First = ListManager.Replace(sl1,sl2,sl3);

            ouput.Text += "\r\n";
            ouput.Text += sl1.ToString();

            rl.SetList(sl1);

            ResumeLayout();
            }
            catch (Exception ex) {
                MessageBox.Show(ex.Message+ ex.StackTrace);
            }
        }
コード例 #4
0
        /// <summary>
        /// Заменяет ? все вхождения одного списка в другой третьим списком
        /// 
        /// 1, 2, 3 , 4, 5, 1, 2, 3, 6
        /// 1, 2, 3
        /// 10, 20.
        /// 
        /// 10, 20, 4, 5, 10, 20, 6.
        /// </summary>
        public static Node Replace(SingleLinkedList L1, SingleLinkedList L2, SingleLinkedList L3)
        {
            Node F1 = L1.First;
            Node F2 = L2.First;
            Node F3 = L3.First;

            SingleLinkedList l1 = L1;
            SingleLinkedList l2 = L2;
            SingleLinkedList l3 = L3;

            if (F1!=null && F2!=null && F3!=null){

                Node p = F1;
                Node pp = null;
                Node q = null;

                Node prep = F1;
                bool matched = false;

                //FIXME: работает, вроде

                if (F1.Info == F2.Info){
                    #region если вхождение в самом начале

                    Debug.WriteLine("предположительно есть совпадение в начале");

                    p = F1;
                    pp = F2;

                    //Node t = p;

                    matched = false;

                    while (pp!=null && p!=null){

                        matched = true;

                        if (p.Info != pp.Info) {
                            matched = false;
                            break;
                        }
                        //else{
                        //matched = true;
                        p=p.Link;
                        pp=pp.Link;
                        //}
                        Debug.WriteLine("!!! p ="+p);
                    }

                    // bp
                    if (matched) {

                        // нашли вхождение
                        Debug.WriteLine("и правда, есть вхождение в начале, меняем");
                        q = (Node)F3.Clone();
                        F1 = q;
                        while (q.Link!=null){
                            q=q.Link;
                        }
                        q.Link = p;

                        prep = q;
                        p = q.Link;
                        //Debug.WriteLine("prep ="+prep.Info+" p="+p.Info);
                    }

                    else {
                        Debug.WriteLine("встретилась "+p.Info+"ложная тревога, переходим в "+F1.Link.Info);
                        prep = F1;
                        p = F1.Link;
                    }

                    #endregion
                }
                /*
                else {
                    prep = F1;
                    p = F1.Link;
                }
                 */

                #region середина и конец

                while (p!=null){
                    Debug.WriteLine(p.Info+"");
                    if (p.Info == F2.Info){
                        Debug.WriteLine("преположительно вхождение");
                        Debug.WriteLine(p+"");
                        // запомнили начало
                        Node s = p;

                        pp = F2;

                        matched = false;

                        while (pp!=null && p!=null){

                            //if (){

                                matched = true;
                                if (pp.Info!=p.Info) {
                                    Debug.WriteLine(pp.Info + "!="+p.Info);
                                    matched = false;
                                    break;
                                }

                                matched = true;
                                //else {
                                //	matched = true;
                                pp = pp.Link;
                                p = p.Link;
                                if (pp == null && matched){
                                    matched = true;
                                    break;
                                }

                                if (p == null) {
                                    matched = false;
                                    break;
                                }

                                //}

                                //matched = true;
                            //}
                            /*
                            else {
                                matched = false;
                                break;
                            }
                            */
                        }

                        if (matched) {
                            Debug.WriteLine("и правда, меняем");
                            q = (Node)F3.Clone();

                            prep.Link = q;

                            while (q.Link!=null){
                                q=q.Link;
                            }

                            q.Link = p;
                            //prep.Link = q;
                            prep = q;
                            //p = p.Link;

                            Debug.WriteLine("prep = "+prep + " p = "+p);
                        }

                        else {

                            prep = s;
                            p = s.Link;
                        }
                    }

                    else {
                        prep = p;
                        p = p.Link;

                    }

                }

                #endregion

            }

            return F1;
        }