Ejemplo n.º 1
0
    /**
     * Extraer los elementos desde la posicion 'start' hasta la posicion 'end' y
     * devolverlo en un nuevo DLinkedList.  Los elementos extraidos desaparecen
     * de la lista 'this'.
     * Ejemplo: si la lista L contiene, en orden, A B C D E F G H I J K L M,
     * L.subList(3, 7) devuelve la lista D E F G H y deja la lista con los
     * valores A B C I J K L M
     */
    public DLinkedList <Value> subList(int start, int end)
    {
        if (start < 0 || start >= size || end < start || end >= size)
        {
            throw new IndexOutOfBoundsException();
        }

        // TODO: implementar
        // Complejidad esperada: O(N) para buscar las dos posiciones
        //                       O(1) para extraer la sublista
        // Valor: 5 puntos
        DLinkedList <Value> a = new DLinkedList <Value>();
        DLinkNode           cur = head.next;
        int pos1 = 0, pos2 = start;

        for (int i = 0; i < size; i++)
        {
            if (pos1 == start)
            {
                a.head.next = cur;
                cur.prev    = a.head;
            }
            else if (pos2 == end)
            {
                a.tail.prev = cur;
                cur.next    = a.tail;
            }
            else
            {
                cur = cur.next;
            }
            pos1++;
            pos2++;
        }

        return(a);
    }
Ejemplo n.º 2
0
        public void AddBeforeTest()
        {
            // [7] 1 2 3 4 5 6
            DLinkNode <int> node7 = new DLinkNode <int>();

            node1.AddBefore(node7);

            Assert.AreEqual(node7, node1.Previous);
            Assert.AreEqual(node2, node1.Next);
            Assert.AreEqual(node1, node7.Next);
            Assert.IsNull(node7.Previous);

            // 7 1 2 [8] 3 4 5 6
            DLinkNode <int> node8 = new DLinkNode <int>();

            node3.AddBefore(node8);

            Assert.AreEqual(node8, node3.Previous);
            Assert.AreEqual(node4, node3.Next);
            Assert.AreEqual(node1, node2.Previous);
            Assert.AreEqual(node8, node2.Next);
            Assert.AreEqual(node2, node8.Previous);
            Assert.AreEqual(node3, node8.Next);
        }
Ejemplo n.º 3
0
    public void Put(int key, int val)
    {
        DLinkNode newNode;

        if (!cache.TryGetValue(key, out newNode))   // add in newNode
        {
            newNode = new DLinkNode(key, val);
            this.cache.Add(key, newNode);
            AddToHead(newNode);
            count++;

            if (count > capacity)
            {
                DLinkNode last = RemoveFromTail();
                cache.Remove(last.key);
                count--;
            }
        }
        else     // update value if key exists
        {
            newNode.val = val;
            MoveToHead(newNode);
        }
    }
Ejemplo n.º 4
0
        public void AddAfterTest()
        {
            DLinkNode node5 = new DLinkNode();

            AddAfter(node5);
            //1 2
            Assert.IsNull(node4.Previous);
            Assert.AreEqual(node5, node1.Next);

            Assert.AreEqual(node4, node2.Previous);
            Assert.IsNull(node2.Next);
            // 1  2 [3]
            Assert.IsNull(node3.Next);
            Assert.AreEqual(node2, node3.Previous);
            Assert.AreEqual(node3, node2.Next);

            // / 1 2 [4] 3

            //Assert.AreEqual(node4, node2.Next);
            //Assert.AreEqual(node2, node4.Previous);
            //Assert.AreEqual(node3, node4.Next);
            //Assert.AreEqual(node4, node3.Previous);
            //Assert.IsNull(node3.Next);
        }
Ejemplo n.º 5
0
    public void RemoveNode(DLinkNode <T> node)
    {
        if (node == null)
        {
            return;
        }
        if (node == head)
        {
            head = node.Next;
        }
        if (node == tail)
        {
            tail = node.Prev;
        }

        if (node.Prev != null)
        {
            node.Prev.Next = node.Next;
        }
        if (node.Next != null)
        {
            node.Next.Prev = node.Prev;
        }
    }
Ejemplo n.º 6
0
 // move node (most recently used one) to the head
 private void MoveToHead(DLinkNode node)
 {
     Remove(node);
     AddToHead(node);
 }
Ejemplo n.º 7
0
 private void Remove(DLinkNode node)
 {
     node.next.pre = node.pre;
     node.pre.next = node.next;
 }
Ejemplo n.º 8
0
        static void Main(string[] args)
        {
            User    user = new User();
            Article art  = new Article();

            art.Publish();

            Console.WriteLine(DateTime.Now.ToString());


            DLinkNode dLinkNode1 = new DLinkNode();
            DLinkNode dLinkNode2 = new DLinkNode();
            DLinkNode dLinkNode3 = new DLinkNode();
            DLinkNode dLinkNode4 = new DLinkNode();

            dLinkNode1.AddAfter(dLinkNode2);
            dLinkNode2.AddAfter(dLinkNode3);
            dLinkNode3.AddAfter(dLinkNode4);

            foreach (DLinkNode item in dLinkNode1)
            {
                Console.WriteLine(item);
            }


            //方法给委托赋值
            ProvideWater provideWater = new ProvideWater(AssignToDlg);

            //匿名方法给委托赋值
            ProvideWater provideWater2 = delegate(Person person)
            {
                return(person.weight--);
            };
            // lambda表达式给委托赋值
            ProvideWater provideWater3 = p => p.weight--;

            Console.WriteLine(GetWater(provideWater3));

            ///////////////////////////////////////////////////////////////////////
            ///构建文章,评论,评价,关键字的关系。
            User lzb = new User {
                Name = "李智博", Password = "******"
            };
            User xy = new User {
                Name = "小鱼", Password = "******"
            };
            User fg = new User {
                Name = "飞哥", Password = "******"
            };
            IList <User> users = new List <User> {
                lzb, xy, fg
            };



            Comment comment1 = new Comment {
                main = "你写的真不错"
            };
            Comment comment2 = new Comment {
                main = "你的文笔真不错"
            };
            Comment comment3 = new Comment {
                main = "写的不是很好,不符合我的价值观"
            };
            Comment comment4 = new Comment {
                main = "写的不错,给你100分"
            };
            Comment comment5 = new Comment {
                main = "你是我见过写的最差的"
            };
            Comment comment6 = new Comment {
                main = "写的不是很符合我的逻辑,感觉很凌乱,继续加油哦"
            };
            IList <Comment> Comments = new List <Comment> {
                comment1, comment2, comment3, comment4, comment5, comment6
            };

            Keyword <Article> java = new Keyword <Article> {
                Word = "java的应用"
            };
            Keyword <Article> c = new Keyword <Article> {
                Word = "c应用"
            };
            Keyword <Article> css = new Keyword <Article> {
                Word = "css的应用"
            };
            Keyword <Article> jquery = new Keyword <Article> {
                Word = "jquery的应用"
            };
            Keyword <Article> it = new Keyword <Article> {
                Word = "编程语言"
            };
            Keyword <Article> csharp = new Keyword <Article> {
                Word = "编程语言之csharp"
            };
            Keyword <Article> net = new Keyword <Article> {
                Word = "编程世界之-.net"
            };
            IList <Keyword <Article> > keywords = new List <Keyword <Article> > {
                java, c, css, jquery, it
            };

            Article Article1 = new Article()
            {
                Title       = "it学习入门",
                Main        = "it入门需要做些什么准备呢,咱们。。。",
                Author      = fg,
                PublishTime = new DateTime(2020, 10, 1),
                keywords    = new List <Keyword <Article> > {
                    it, csharp
                },
                Comment = new List <Comment> {
                    comment3
                }
            };



            Article Article2 = new Article
            {
                Title       = "高效的学习效率",
                Main        = "怎样提高我们的学习效率呢。。。",
                Author      = fg,
                PublishTime = new DateTime(2019, 10, 1),
                keywords    = new List <Keyword <Article> >()
                {
                    it, java, c
                },
                Comment = new List <Comment> {
                    comment4
                }
            };
            Article Article3 = new Article
            {
                Title       = "怎样选择编程语言",
                Main        = "编程语言需要结合。。。。",
                Author      = fg,
                PublishTime = new DateTime(2019, 6, 1),
                keywords    = new List <Keyword <Article> >()
                {
                    it, css
                },
                Comment = new List <Comment>()
                {
                    comment5
                }
            };
            Article article4 = new Article
            {
                Title    = "编程语言的魅力",
                Author   = xy,
                keywords = new List <Keyword <Article> >()
                {
                    it, css, jquery
                },
                Comment = new List <Comment>()
                {
                    comment1, comment2
                },
                PublishTime = new DateTime(2020, 11, 1)
            };
            List <Article> Articles = new List <Article> {
                Article1, Article2, Article3, article4
            };

            Problem problem1 = new Problem
            {
                Author      = lzb,
                Reward      = 13,
                PublishTime = new DateTime(2020, 1, 20),
                Main        = "求助大佬关于c#委托方面的知识",
                Title       = "c#方面的求助",
                comments    = new List <Comment> {
                    comment6
                },
            };

            IList <Problem> problems = new List <Problem> {
                problem1
            };


            //文章文章添加评价
            Appraise appraise1 = new Appraise {
                Voter = lzb
            };

            appraise1.Agree();
            Article1.appraises.Add(appraise1);

            Appraise appraise2 = new Appraise {
                Voter = xy
            };

            appraise2.Disagree();
            Article1.appraises.Add(appraise2);
            //一个关键字也可以对应多个文章
            it.Articles = new List <Article> {
                Article1, Article2, Article3
            };
            //文章可以有多个评论
            Article1.Comment = new List <Comment> {
                comment1, comment2
            };
            //每个评论必须有一个对应的文章
            comment3.Article = Article1;


            ////每篇文章都对应着它的作者

            Article1.Author = fg;
            Article2.Author = fg;
            Article3.Author = fg;
            article4.Author = xy;


            //ContentService kk = new ContentService();
            //Article news = new Article();
            //kk.Publish(news);
            //Console.WriteLine(news.PublishTime);

            //在之前“文章 / 评价 / 评论 / 用户 / 关键字”对象模型的基础上,添加相应的数据,然后完成以下操作:

            //用linq方法改写以前的表达式

            //找出“飞哥”发布的文章
            var Find_dfg = Articles.Where(a => a.Author == fg);
            //找出2019年1月1日以后“小鱼”发布的文章
            var Find_xy = Articles.Where(a => a.Author == xy && a.PublishTime > new DateTime(2019, 1, 1));
            //按发布时间升序 / 降序排列显示文章
            var Ascd = Articles.OrderBy(a => a.PublishTime);
            var Desc = Articles.OrderByDescending(a => a.PublishTime);


            //统计每个用户各发布了多少篇文章
            var Fg_article = Articles.Where(a => a.Author == fg).GroupBy(a => a.Author);
            var Xy_article = Articles.Where(a => a.Author == xy).GroupBy(a => a.Author);
            //找出包含关键字“C#”或“NET”的文章
            var Csharp_kw = Articles.Where(a => a.keywords.Any(k => k.Word == "c#"));
            var Net_kw    = Articles.Where(a => a.keywords.Any(k => k.Word == ".NET"));

            //找出评论数量最多的文章
            var Article_Comment_Max = Articles.OrderByDescending(a => a.Comment.Count()).First();

            //找出每个作者评论数最多的文章
            var Fg_Comment_Max = Articles.Where(a => a.Author == fg).OrderByDescending(a => a.Comment.Count()).First();
            var Xy_Comment_Max = Articles.Where(a => a.Author == xy).OrderByDescending(a => a.Comment.Count()).First();

            //找出每个作者最近发布的文章
            var Fg_Article_Rec = Articles.Where(a => a.Author == fg).OrderByDescending(a => a.PublishTime).First();
            var Xy_Article_Rce = Articles.Where(a => a.Author == xy).OrderByDescending(a => a.PublishTime).First();


            //找出每一篇求助的悬赏都大于5个帮帮币的求助作者
            var resualt = problems.Where(p => p.Reward > 5).GroupBy(p => p.Author);


            //Console.WriteLine(HomeWork<int>.BinarySeek(new System.Collections.Generic.List<int> { 1, 5, 76, 8, 9, 0, 43, 6, 3, 5 }, 0));

            ///字符串
            //Console.WriteLine(mimicJoin("-", new string[] {"众所周知", "飞哥", "的", "颜值","是","一百分" }));
            //Console.WriteLine(GetCount("13212*212-212", "212"));
            //Console.WriteLine(GetCount("111234512", "12"));
            //封装一个方法,可以修改Content的CreateTime和PublishTime
            //DateTime lw = new DateTime(2023, 3, 4);

            //Content article = new Content("文章");
            //article.GetType()
            //    .GetProperty("CreateTime", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(article, lw);
            //Console.WriteLine();



            //Console.WriteLine(Program.findPrimeNum(1, 10));

            //TokenManager tokenManager = new TokenManager();
            //User user = new User("lls", "1234");
            //Console.WriteLine(user.ToString());

            //Console.WriteLine(user);

            //Article js = new Article
            //{
            //    title = "title1",
            //    Author = new User("lzb", "333")
            //};

            //User lls = new User("lls", "123");
            //js.AgreedBy(lls);

            //new Article().AgreedBy(new User("lls", "1234"));


            //ISendMessage lzb = new User("lzb","123");///调用显示接口
            //User lls = new User("lls", "333");

            //lzb.Send(lls);

            //Console.WriteLine(time.GetDate(new DateTime(2020,2,27), 3));
            //Console.WriteLine(time.GetDate(new DateTime(2020,2,27), 1));
            //Console.WriteLine(time.GetDate(new DateTime(2020,12,30), 1));
            //Console.WriteLine(time.GetDate(new DateTime(2020,1,1), 1));

            //Console.WriteLine(time.GetDateofmondy(2021));
            //Console.WriteLine(time.GetDateofmondy(2022));
            //Console.WriteLine(time.GetDateofmondy(2023));
            //Console.WriteLine(time.GetDateofmondy(2024));


            //time.GetWeeks(new DateTime(2020, 1, 6));


            //TokenManager lzb = new TokenManager();
            //lzb._token = lzb._token | Token.Admin;///存入权限身份
            //lzb._token = lzb._token ^ Token.Blogger;//剥夺权限身份


            //Console.WriteLine((lzb._token & Token.Newbie) == Token.Newbie);//查看是否存在这个权限



            //用代码证明struct定义的类型是值类型
            //bed dream = new bed();
            //dream = null;///值类型不能赋值为null
            //User lzb = new User("lzb","123");
            //lzb = null;///同样的由class定义的引用类型就可以赋值为null

            //Suggest lzb = new Suggest();
            //Console.WriteLine(lzb._kind);
            //Article lz = new Article();
            //Console.WriteLine(lz._kind);


            // FactoryContext lzb = new FactoryContext();
            //FactoryContext a = FactoryContext.foo();
            //FactoryContext b = FactoryContext.foo();
            //MimicStack.MimicStack.Push(123);
            //MimicStack.MimicStack.Push(124);
            //MimicStack.MimicStack.Push(123);

            /* FactoryContext a = new FactoryContext();*////构造函数设为私有后,新new的时候就会报错


            //problem lzb = new problem();
            //lzb[1] = "123";
            //lzb[2] = "456";
            //lzb[3] = "789";
            //lzb[0] = "22";
            //Console.WriteLine(lzb[2]);

            //problem lzb = new problem("lzb");

            //problem lw = new problem("");

            //User zdh = new User("空", "ki");
            //Console.WriteLine(zdh.Name);

            //Console.WriteLine(zdh.Password);

            ///调用函数
            ///
            //string output;
            //LZBC.user.Register("1234", "2345", "3456",  "4567", "6789",out output);
            //if (LZBC.user.Register("1234", "2345", "3456", "4567", "6789", out output))
            //{
            //    Console.WriteLine(output);
            //}
            //else
            //{
            //    Console.WriteLine(output);
            //}



            //            string num;
            //            if (logOn("12", "13", "14", out num)
            //)
            //            {
            //                Console.WriteLine(num);
            //            }
            //            else
            //            {
            //                Console.WriteLine(num);

            //            }


            //Console.WriteLine(BinarySeek(new int[] { 1, 3, 5, 6, 8, 12, 24 }, 0, 7, 12));
            //Console.WriteLine(BinarySeek2(new int[] { 1, 3, 5, 6, 8, 12, 24, 34,75 },75 ));
            //GetArray(12, 12, 12);
            //GuessMe();
            //Console.WriteLine(GetAverage(new double[] { 23.45, 12.3, 34.5 }));
            //findPrimeNum(10,30);//找质数
            /// Console.WriteLine(getMax(new double[] { 23.1, 44, 32, 13 }));
            //getMax(new double[] { 23.1, 44, 32, 13 });
            //twoDimensional();//数组下标
            //GetAverage(1200, 43);//平均成绩
            //Console.WriteLine(GetAverage(1200, 43));

            // Console.WriteLine(logOn("123", "234", "345"));//登录
            //GuessMe(12);//猜数字

            ///  //getSum(1, 2);
            //Console.WriteLine(getSum(1, 2));
            //getProduct(2, 3);
            //Console.WriteLine(getProduct(2, 3));
            //differencing(23, 21);
            //Console.WriteLine(differencing(23, 21));
            //QUOTIENT(4, 3);
            //Console.WriteLine(QUOTIENT(6,2.4));
        }
Ejemplo n.º 9
0
 public Enumerator(DLinkNode <T> dLinkNode)
 {
     localDLN = dLinkNode;
     Current  = dLinkNode;
     isFirst  = true;
 }
Ejemplo n.º 10
0
 //删除节点
 private void removeNode(DLinkNode node)
 {
     node.next.prev = node.prev;
     node.prev.next = node.next;
 }
Ejemplo n.º 11
0
 private void moveToHead(DLinkNode node)
 {
     removeNode(node);
     addToHead(node);
 }
Ejemplo n.º 12
0
        public void AddTest()
        {
            //AddAfter
            //首
            DLinkNode <int> node8 = new DLinkNode <int>();

            node1.AddAfter(node8);
            //1 [8] 2 3 4
            Assert.IsNull(node1.Prev);
            Assert.AreEqual(node8, node1.Next);
            Assert.AreEqual(node1, node8.Prev);
            Assert.AreEqual(node2, node8.Next);
            Assert.AreEqual(node8, node2.Prev);
            Assert.AreEqual(node3, node2.Next);

            //中
            DLinkNode <int> node9 = new DLinkNode <int>();

            node3.AddAfter(node9);
            //1 8 2 3 [9] 4
            Assert.AreEqual(node2, node3.Prev);
            Assert.AreEqual(node9, node3.Next);
            Assert.AreEqual(node3, node9.Prev);
            Assert.AreEqual(node4, node9.Next);
            Assert.AreEqual(node9, node4.Prev);
            Assert.IsNull(node4.Next);

            //尾
            DLinkNode <int> node10 = new DLinkNode <int>();

            node4.AddAfter(node10);
            //1 8 2 3 9 4 [10]
            Assert.AreEqual(node9, node4.Prev);
            Assert.AreEqual(node10, node4.Next);
            Assert.AreEqual(node4, node10.Prev);
            Assert.IsNull(node10.Next);


            //AddBefore
            //首
            DLinkNode <int> node21 = new DLinkNode <int>();

            node1.AddBefore(node21);
            //[21] 1 8 2 3 9 4 10
            Assert.IsNull(node21.Prev);
            Assert.AreEqual(node1, node21.Next);
            Assert.AreEqual(node21, node1.Prev);
            Assert.AreEqual(node8, node1.Next);

            //中
            DLinkNode <int> node22 = new DLinkNode <int>();

            node3.AddBefore(node22);
            //21 1 8 2 [22] 3 9 4 10
            Assert.AreEqual(node8, node2.Prev);
            Assert.AreEqual(node22, node2.Next);
            Assert.AreEqual(node2, node22.Prev);
            Assert.AreEqual(node3, node22.Next);
            Assert.AreEqual(node22, node3.Prev);
            Assert.AreEqual(node9, node3.Next);

            //尾
            DLinkNode <int> node23 = new DLinkNode <int>();

            node10.AddBefore(node23);
            //21 1 8 2 22 3 9 4 [23] 10
            Assert.AreEqual(node9, node4.Prev);
            Assert.AreEqual(node23, node4.Next);
            Assert.AreEqual(node4, node23.Prev);
            Assert.AreEqual(node10, node23.Next);
            Assert.AreEqual(node23, node10.Prev);
            Assert.IsNull(node10.Next);
        }
Ejemplo n.º 13
0
    /*
     * Elimina los elementos elegidos por el arreglo de flags 'toRemove', donde:
     *   toRemove[i] es true si el elemento en la posicion i debe ser eliminado
     *   toRemove[i] es false si el elemento en la posicion i no se elimina
     * Las posiciones son 0-based, donde head corresponde a la posicion 0 y tail
     * corresponde a la ultima posicion.
     * Devuelve un Linked List con los elementos eliminados de la lista
     */
    public DLinkedList <T> RemoveSelected(bool[] toRemove)
    {
        // TODO: implementar
        // Valor: 9 puntos
        // Complejidad esperada: O(N)
        // Restricciones:
        // 1) No se permite crear nodos nuevos: o sea, tu implementacion no debe
        //    invocar "new DLinkedNode"
        // 2) No se permite crear arreglos
        // 3) No se permite modificar el valor del atributo 'value' grabado en
        //    el nodo

        DLinkedList <T> Removed        = new DLinkedList <T>();
        DLinkNode       current        = head;
        DLinkNode       CurrentRemoved = Removed.head;

        for (int i = 0; i < toRemove.Length && current != null; i++)
        {
            if (toRemove[i])
            {
                if (CurrentRemoved == null && current == head)
                {
                    Removed.head        = current;
                    Removed.tail        = current;
                    head                = current.next;
                    current             = head;
                    CurrentRemoved      = Removed.head;
                    CurrentRemoved.next = null;
                    Removed.Size++;
                    Size--;
                }
                else if (Removed.head == null && current != head)
                {
                    Removed.head        = current;
                    Removed.tail        = current;
                    current.prev.next   = current.next;
                    current             = current.next;
                    CurrentRemoved      = Removed.head;
                    current.prev        = CurrentRemoved.prev;
                    CurrentRemoved.prev = null;
                    CurrentRemoved.next = null;
                    Removed.Size++;
                    Size--;
                }
                else if (Removed.head != null && current.next != null)
                {
                    CurrentRemoved.next = current;
                    current.prev.next   = current.next;
                    current.prev        = CurrentRemoved;
                    current             = current.next;
                    CurrentRemoved      = CurrentRemoved.next;
                    CurrentRemoved.next = null;
                    Removed.tail        = CurrentRemoved;
                    Removed.Size++;
                    Size--;
                }
                else
                {
                    CurrentRemoved.next = current;
                    current.prev.next   = null;
                    tail                = current.prev;
                    CurrentRemoved      = CurrentRemoved.next;
                    CurrentRemoved.next = null;
                    Removed.tail        = CurrentRemoved;
                    Removed.Size++;
                    Size--;
                }
            }
            else
            {
                current = current.next;
            }
        }
        return(Removed);
    }
Ejemplo n.º 14
0
 public void Reset()
 {
     Prev  = Next = null;
     Value = null;
     Key   = 0;
 }