• c#队列的实现


    /*
         用一片连续的存储空间来存储队列中的数据元素,这样的队列称为顺序队列
        (Sequence Queue)。类似于顺序栈,在这里我就不做介绍了,我们直接用列表实现一个队列
         */

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 数据结构Linked_List
    {
        public class LinkQueue<T>
        {
            private Node<T> front;//队列头指示器
    
            internal Node<T> Front
            {
                get { return front; }
                set { front = value; }
            }
            private Node<T> rear;//队列尾指示器
    
            internal Node<T> Rear
            {
                get { return rear; }
                set { rear = value; }
            }
            private int nCount;//队列结点个数
    
            public int NCount
            {
                get { return nCount; }
                set { nCount = value; }
            }
            public LinkQueue()
            {
                front = rear = null;
                nCount = 0;
            }
            public int GetLength()
            {
                return nCount;
            }
    
            public void Clear()
            {
                front = rear = null;
                nCount = 0;
            }
    
            public bool IsEmpty()
            {
                if ( front == rear && 0 == nCount )
                {
                    return true;
                }
                return false;
            }
    
            public void Enqueue( T item )
            {
                Node<T> p = new Node<T>(item);
                if ( IsEmpty() )
                {
                    front = rear = p;// 这步很重要 当第一个元素入队的时候,必须给front赋值,否则front一直都是null
                }
                else
                {
                    rear.Next = p;
                    rear = p;
                }
                ++nCount;
            }
    
            public T Dqueue()
            {
                if ( IsEmpty() )
                {
                    Console.WriteLine("队列为空");
                    return default(T);
                }
                Node<T> p = front;//从队列头出对
                front = front.Next;
                if ( front == null )
                {
                    rear = null;
                }
                --nCount;
                return p.Data;
            }
            //获取链队列头结点的值
            public T GetFront()
            {
                if (IsEmpty())
                {
                    Console.WriteLine("队列为空");
                    return default(T);
                }
                return front.Data;
            }
        }
    }

    /*
            队列的应用举例
            编程判断一个字符串是否是回文。回文是指一个字符序列以中间字符
            为基准两边字符完全相同,如字符序列“ACBDEDBCA”是回文
            */

    public static bool IsPalindromic()
            {
                SeqStack<char> stack = new SeqStack<char>(50);
                LinkQueue<char> queue = new LinkQueue<char>();
                //string str = Console.ReadLine();// 这里随便输入
                string str = "ACBDEDBCA";// 测试
                for ( int i = 0; i < str.Length; ++i )
                {
                    stack.Push(str[i]);
                    queue.Enqueue(str[i]);
                }
                bool flag = false;
               // 这里只需循环一半元素即可
                for (int i = 0; i < str.Length >> 1; ++i )
                {
                    if (queue.Dqueue() == stack.Pop())
                    {
                        flag = true;
                    }
                    else
                    {
                        flag = false;
                    }
                }
                return flag;
            }

    好了,今天就到这里了

  • 相关阅读:
    插件制作入门
    Hank老师推荐的一些博客
    高级iOS工程师的博客
    查看一个文件是否支持64位 方法 ,[symbol(s) not found for architecture x86_64]相关
    ssh-keygen的使用方法及配置authorized_keys两台linux机器相互认证
    使用git在两台机器间同步代码
    scp远程拷贝命令
    后台启动程序并重定向输出信息脚本
    automake 工具的使用
    minigui启动过程
  • 原文地址:https://www.cnblogs.com/lihonglin2016/p/4271434.html
Copyright © 2020-2023  润新知