注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐
GACHA精选

用C#学数据结构(7)  

2011-08-02 14:53:58|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
声明:本人非计算机专业人士,没有过多的时间、经历和能力深入研究数据结构的实现,所以本系列文章不处理数据结构的实现,主要是练习各种数据结构的使用。欢迎大家交流讨论。

第三章   栈和队列

栈的操作只能在表的一端进行。

队列的插入操作在表的一端进行而其它操作在表的另一端进行。

栈和队列是操作受限的线性表。

(Stack)是操作限定在表的尾端进行的线性表。表尾由于要进行插入、删除等操作,表尾称为栈顶(Top),另一端是固定的叫栈底(Bottom)。当栈中没有数据元素时叫空栈(Empty Stack)

栈的操作是线性表操作的一个子集。

C#中的栈

       C#中使用Stack<T>泛型类来实现。Stack内部使用数组来实现,Stack 的容量默认初始容量为10。向Stack添加元素时,将通过重新分配内部数组,根据需要自动增大容量。可通过调用 TrimExcess 来减少容量。如果 Count 小于堆栈的容量,则 Push O(1) 操作。如果需要增加容量以容纳新元素,则 Push 成为 O(n) 操作,其中 n CountPop O(1) 操作。Stack 接受空引用作为引用类型的有效值,并且允许有重复的元素。

Stack的属性和方法:

成员

说明

Count

获取Stack中包含的元素数

Clear

Stack中移除所有对象

Contains

确定某元素是否在Stack

GetEnumerator

返回Stack的一个枚举数

Peek

返回位于Stack顶部的对象但不将其移除

Pop

移除并返回位于Stack顶部的对象

Push

将对象插入Stack的顶部

ToArray

Stack复制到新数组中

TrimExcess

如果元素数小于当前容量的90%,将容量设置为Stack中的实际元素数

应用实例:数制转换问题。数制转换问题是将任意一个非负的十进制数转换为其它进制的数,这是计算机实现计算的基本问题。一般的解决方法的利用辗转相除法。下面将提供一个函数实现将十进制数转化为2816进制的函数。

/// <summary>

/// 将十进制数转化为其他进制数

/// </summary>

/// <param name="n">待转换十进制数</param>

/// <param name="s">转换类型,'B'则为二进制,'Q'为八进制,'H'为十六进制</param>

/// <returns>代表该进制的字符串</returns>

public static string Dec2Other(int n, char s)

{

    Stack<int> st = new Stack<int>();

    int baseNum = 10;

    switch (s)

    {

        case 'B': baseNum = 2; break;

        case 'Q': baseNum = 8; break;

        case 'H': baseNum = 16; break;

    }

    while (n > 0)

    {

        st.Push(n % baseNum);

        n = n / baseNum;

    }

    string result = "";

    while (st.Count > 0)

    {

        string c;

        int t = st.Pop();

        switch (t)

        {

            case 10: c = "A"; break;

            case 11: c = "B"; break;

            case 12: c = "C"; break;

            case 13: c = "D"; break;

            case 14: c = "E"; break;

            case 15: c = "F"; break;

            default: c = t.ToString(); break;

        }

        result += c;

    }

    return result;

}

       如果提供的十进制数是8086,则转换后的结果为:

用C学数据结构(7) - Castor - 趁年轻,多折腾~~
下一篇文章将探讨括号匹配问题。
 
  评论这张
 
阅读(482)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016