摘要: 最近学习wcf,看了artech的wcf系列文章,在调试我的WCF之旅(3):在WCF中实现双工通信时,代码写完后,1.添加svc文件;2.创建虚拟目录 3.添加配置文件,将服务宿主到iis中后,出现如下问题:Could not find a base address that matches scheme net.tcp for the endpoint with binding NetTcpBinding. Registered base address schemes are [http].查了半天资料,最终解决掉了,解决方案如下:1.选择相应的website,右击选择edit bind阅读全文
posted @ 2012-02-07 10:09 小伦 阅读(150) 评论(0) 编辑

static string ReverseSentence(string sentence)
        {
            if (sentence == null)
                throw new ArgumentNullException("sentence");
            if (sentence.Length == 0)
                return sentence;

            char [] senten = new char[sentence.Length];
            for (int i = 0; i < senten.Length; i++) //将整个句子反转
            {
                senten[i] = sentence[senten.Length-1-i];
            }

            int start = 0;
            int length = 0;
            int index = 0;
            string rt = string.Empty;
            char[] word;
            while (index < senten.Length)
            {
                while (index <senten.Length)  //内循环
                {
                    if (senten[index] >= 65 && senten[index] <= 122) //若为字母,则不断对长度加一(单词是连续字母,故可以使用start+length的组合确定一个单词)
                    { 
                        length++;
                        index++;
                    }
                    else // 非字母
                    {
                        if (length == 0) //未发现连续字母
                        {
                            start++;  //调整单词开始位置start
                            rt += senten[index];
                            index++;
                        }
                        break;
                    }
                }
                if (length > 0)  //统计完一个单词,对其反转
                {
                    word = new char[length];
                    for (int i = start; i < start + length; i++)
                    {
                        word[i - start] = senten[i];
                    }
                    for (int i = 0; i < word.Length; i++)
                    {
                        rt += word[word.Length - i - 1];
                    }
                    start = start + length;
                    length = 0;
                }
            }
            return rt;

        }

posted @ 2011-03-31 17:41 小伦 阅读(253) 评论(0) 编辑

  周末闲来无事,突然想到了二叉树的遍历问题,如果考虑用递归算法的话比较简单,但是如果用空间换取时间的话,考虑用辅助数据结构:栈来解决遍历的问题,代码如下:   

    //非递归后序遍历二叉树
        static void PostOrder(BinaryTreeNode root)
        {
            Stack<BinaryTreeNode> stack = new Stack<BinaryTreeNode>();

          BinaryTreeNode curr = root;
            while (curr != null)
            {
                stack.Push(curr );
                curr = curr .Left;
            }
            BinaryTreeNode tmp = null;
            BinaryTreeNode last = null;
            while (stack.Count > 0)
            {
                tmp = stack.Peek();
                if (tmp.Right == null || tmp.Right == last) //关键点:栈顶元素的右孩子为空或者为刚刚访问过的节点时才弹出并输出
                {
                    tmp = stack.Pop();
                    last = tmp;
                    Console.WriteLine(tmp.Data);
                }
                else
                {
                    tmp = tmp.Right;//右孩子不为空入栈

                    stack.Push(tmp);
                    while (tmp.Left != null)//并将右孩子的所有左子孙节点入栈
                    {
                        stack.Push(tmp.Left);
                        tmp = tmp.Left;
                    }
                }
            }

        }

       //非递归前序遍历二叉树

        static void PrevOrder(BinaryTreeNode root)
        {
            Stack<BinaryTreeNode> stack = new Stack<BinaryTreeNode>();

            stack.Push(root);
            BinaryTreeNode tmp = null;
            while (stack.Count >0)
            {
                tmp = stack.Pop();
                Console.WriteLine(tmp.Data);
                if (tmp.Right != null)
                    stack.Push(tmp.Right); //右孩子节点不为空入栈,因为要先输出左孩子,鉴于栈的特点是先入后出,所以先入右孩子
                if (tmp.Left != null)
                    stack.Push(tmp.Left);//左孩子节点不为空入栈

            }
        }

        //非递归中序遍历二叉树
        static void MiddleOrder(BinaryTreeNode root)
        {
            Stack<BinaryTreeNode> stack = new Stack<BinaryTreeNode>();

           BinaryTreeNode curr = root;
            while (curr!= null)
            {
                stack.Push(curr);
                curr= curr.Left;
            }
            BinaryTreeNode tmp = null;
            while (stack.Count > 0)
            {
                tmp = stack.Pop();//与后续遍历的差别是:输出的时候检测右孩子是否为空,或者右孩子是否刚刚访问过
                Console.WriteLine(tmp.Data);
                tmp = tmp.Right;
                if (tmp != null)
                {
                    stack.Push(tmp);
                    while (tmp.Left != null)
                    {
                        stack.Push(tmp.Left);
                        tmp = tmp.Left;
                    }
                   
                }
            }
        }

测试通过的代码:http://files.cnblogs.com/shiyulun1984/test.rar

欢迎拍砖!

posted @ 2011-03-12 11:43 小伦 阅读(1237) 评论(2) 编辑

     
   class LinkNode
    {
        private LinkNode _next;

        internal LinkNode Next
        {
            get { return _next; }
            set { _next = value; }
        }

        private int _data;

        public int Data
        {
            get { return _data; }
            set { _data = value; }
        }

        public LinkNode()
        { }

        public LinkNode(int data)
        {
            _data = data;
        }

        public LinkNode(int data, LinkNode next)
        {
            _data = data;
            _next = next;
        }
    }
   static LinkNode SortLink(LinkNode head)
        {

            LinkNode current = head.Next;
            LinkNode next = null;
            LinkNode prevCurr = head, prevNext = head.Next;
            
            while (current != null)
            {
                next = current.Next;
                while (next != null)
                {
                    if (current.Data > next.Data)
                    {
                        LinkNode tmp = null;
                        if (current.Next == next) //key:当两个腰交换的节点相邻时记录next将要指向的地址为基准节点ajacent element exchange
                            tmp = current;
                        else
                        {   //要交换的几点不相邻时,记录next将要指向的地址为基准节点的下一个节点,一定要注意相邻节点的处理,否则会出现死循环
                            if (prevNext != null)
                                prevNext.Next = current;
                            tmp = current.Next;
                        }
                        current.Next = next.Next;
                        next.Next = tmp;
                        if (prevCurr != null)
                            prevCurr.Next = next;
                        current = next; //改变基准节点  为位置提到前面来的节点                    }

                    prevNext = next;
                    next = next.Next;
                }
                prevCurr = current;
                current = current.Next;

            }
            return head;
        }
posted @ 2011-03-11 17:41 小伦 阅读(339) 评论(0) 编辑
摘要: 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。 结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚。 下面就是我的笔记,主要用来整理自己的思路。但是,我尽量试图写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。阅读全文
posted @ 2010-09-19 15:21 小伦 阅读(538) 评论(0) 编辑
摘要: 题目:设计一种数据结构和算法,让取队列最大值的操作的事件复杂度降到最低。对于栈来讲,Push和Pop均是在栈顶完成的,所以很容维护最大值,而且他的时间复杂度是O(1),基本实现如下所示:实现代码:1.栈类:代码栈能够有效的实现队列,而且栈的取最大值的操作又很容,所以队列的取最大值的操作可以很容易完成了,考虑使用两个栈来实现队列:(队列入队的实现:利用栈B入栈所有元素;队列出队的实现:将栈B中的元素...阅读全文
posted @ 2010-09-05 16:52 小伦 阅读(2144) 评论(11) 编辑
摘要: 《 编程之美》中有个关于逐层遍历二叉树的算法:阅读全文
posted @ 2010-09-05 00:04 小伦 阅读(1379) 评论(5) 编辑
摘要: 关于字符串的驻留的机制,对于那些了解它的人肯定会认为很简单,但是我相信会有很大一部分人对它存在迷惑。在开始关于字符串的驻留之前,先给出一个有趣的Sample:阅读全文
posted @ 2010-08-26 14:00 小伦 阅读(214) 评论(0) 编辑
摘要: 作者在开始讲正文之前先对读者做了一个小测验:换一个灯泡需要多少个程序员?(貌似换灯泡跟程序员关系不大:-)),可能有三种答案: 1.根本不需要,因为灯泡根本没坏。 2.仅仅需要一名,但是需要耗费一整夜的时间和大量的咖啡和匹萨。 3.需要20名,1名解决最初的问题,然后由后面19名解决第1名所带来的一系列糟糕的问题。阅读全文
posted @ 2010-06-16 15:22 小伦 阅读(10932) 评论(19) 编辑
摘要:      最近在看【美】Pete GoodLiffe写的《编程匠艺》,很有感触。边读边想,发现能够与作者产生强烈的共鸣,这真是一种美妙的感觉。所以想把与作者产生...阅读全文
posted @ 2010-06-01 20:50 小伦 阅读(2343) 评论(4) 编辑
摘要:     不知道大家有没有在实际中碰到过程序集之间的元素循环依赖的问题,例如:A.dll 中的类A 引用到了 B.dll中的类B,B.dll中的类B又引用到了程序A.dll...阅读全文
posted @ 2010-05-20 23:59 小伦 阅读(268) 评论(1) 编辑
摘要: 最近项目中遇到了特殊文件(例如:AutoCAD dwt文件)能上传至sharepoint站点但是无法下载的问题,经查找资料,找到了相关的解决方案。 于是想到了原先项目中文件的下载是这样设计的,如图1所示:阅读全文
posted @ 2010-05-18 22:07 小伦 阅读(1073) 评论(0)  编辑
摘要: 文件操作是程序中非常基础和重要的内容,而路径、文件、目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供给你一点有益的思路,如果你有好的建议,恳请能够留言,使这些内容更加完善。阅读全文
posted @ 2010-04-01 13:18 小伦 阅读(809) 评论(0) 编辑
摘要: 一 Log4net简介 Log4net 是基于.net开发的一款非常著名的记录日志开源组件。他最早是2001年7月由NeoWorks Limited启动的项目,基本的框架源于另外的一个非常著名的姐妹组件-log4j。Log4net记录日志的功能非常强大。它可以将日志分不同的等级,比不同的样式,将日志输出到不同的媒介。阅读全文
posted @ 2009-12-01 11:59 小伦 阅读(192) 评论(0) 编辑
摘要: Ctrl+Shift+F: 在文件中查找 F3: 查找下一个 Shift+F3: 查找上一个 Ctrl+H: 替换 Ctrl+Shift+H: 在文件中替换 Alt+F12: 查找符号(列出所有查找结果) Ctrl+Shift+V: 剪贴板循环 Ctrl+左右箭头键: 一次可以移动一个单词 阅读全文
posted @ 2009-11-23 10:35 小伦 阅读(340) 评论(0) 编辑
摘要: 1.单链表的定义和由来:  链表是用一组地址可能连续也可能不连续的存储单元来存储线性表中的数据元素,在存储数据元素时,除了要存储数据元素本身之外,还要存储与它相邻的数据元素的地址信息,这两部分组成了线性表中一个数据元素的映像,称之为"结点",存储数据元素本身的部分称之为:数据域,存储相邻数据元素地址的部分称之为:地址域,所有节点通过地址域链接起来,像一个链条,故用此种方式存储的线性表称之为:链表....阅读全文
posted @ 2009-11-01 21:24 小伦 阅读(1087) 评论(4) 编辑
摘要: 线性表是线性存储结构中比较简单的一种结构.线性表是线性结构的抽象,线性表中的各个元素是一对一的线性关系,这种一对一的关系是位置关系,即:除第一个元素外,其他元素只有一个前驱;除最后一个元素外,其他元素只有一个后继;  线性表的存储分为:顺序存储和链式存储,顺序存储是指用地址连续的存储单元依次存储线性表中的各个元素,用这种方式存储的线性表称为顺序表;链式存储是指用一组任意的存储单元(地址可以是连续的...阅读全文
posted @ 2009-10-18 18:30 小伦 阅读(1617) 评论(3) 编辑
posted @ 2009-05-19 22:59 小伦 阅读(191) 评论(1) 编辑
posted @ 2009-04-22 19:28 小伦 阅读(152) 评论(0) 编辑
摘要: 自定义集合类阅读全文
posted @ 2009-04-20 17:01 小伦 阅读(260) 评论(2) 编辑