(7)C# 基础——数组

.NET C# Web开发学习之路(七)——数组

数组中包含若干相同类型的变量,这些变量可以通过索引进行访问。数组中的额变量称为数组的元素,数组能够容纳元素的数量称为数组的长度。数组中的每个元素都具有唯一的索引与其想对应,数组的索引从0开始。

数组是通过指定数组的元素类型、数组的维度和数组每个维度的上限和下限来定义的,即一个数组的定义应该包含以下几点要素:

  • 元素类型
  • 数组的维度
  • 每个维数的上下限

数组类型是从抽象基类array派生的引用类型,通过new运算符创建数组并将数组元素初始化为它们的默认值。数组可以分为一维数组、二维数组和多维数组等。

一维数组

1、声明和初始化
声明一维数组的语法格式如下:

    type[] arratName;

说明:

  • type: 数组存储数据的数据类型
  • arrayName:数组名称

数组的初始化有很多形式,可以通过new运算符或者不使用创建数组并将数组元素初始化为它们的默认值。

    int[] arr = new int[5];
    int[] arr = new int{1,2,3,4,5};
    string[] arrStr = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};

2、使用

需要存储多个值时可以使用一维数组,可以通过foreach语句或者数组的下标访问数组中的元素。

    static void Main(string[] args)
    {
        int[] arr ={1,2,3,4,5};
        foreach(int n in arr)
        {
            Console.Write("{0}",n + " ");
        }
    }

运行结果为:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于第一个问题,以下是使用 C# 编写的程序代码,实现了生成哈夫曼树和哈夫曼编码的功能: ```csharp using System; using System.Collections.Generic; namespace HuffmanEncoding { class Program { static void Main(string[] args) { int[] freq = { 5, 2, 1, 4, 3 }; char[] chars = { 'a', 'b', 'c', 'd', 'e' }; // 构造哈夫曼树 HuffmanNode root = BuildHuffmanTree(chars, freq); // 生成哈夫曼编码 Dictionary<char, string> codes = GenerateHuffmanCode(root); // 输出结果 Console.WriteLine("Original array: "); for (int i = 0; i < freq.Length; i++) { Console.WriteLine(chars[i] + ": " + freq[i]); } Console.WriteLine("\nHuffman tree: "); PrintHuffmanTree(root); Console.WriteLine("\nHuffman codes: "); foreach (var code in codes) { Console.WriteLine(code.Key + ": " + code.Value); } } // 定义哈夫曼树节点类 class HuffmanNode { public char Char { get; set; } public int Freq { get; set; } public HuffmanNode Left { get; set; } public HuffmanNode Right { get; set; } } // 构造哈夫曼树函数 static HuffmanNode BuildHuffmanTree(char[] chars, int[] freq) { List<HuffmanNode> nodes = new List<HuffmanNode>(); for (int i = 0; i < chars.Length; i++) { nodes.Add(new HuffmanNode { Char = chars[i], Freq = freq[i] }); } while (nodes.Count > 1) { nodes.Sort((a, b) => b.Freq - a.Freq); HuffmanNode leftNode = nodes[nodes.Count - 1]; HuffmanNode rightNode = nodes[nodes.Count - 2]; HuffmanNode parentNode = new HuffmanNode { Freq = leftNode.Freq + rightNode.Freq, Left = leftNode, Right = rightNode }; nodes.RemoveAt(nodes.Count - 1); nodes.RemoveAt(nodes.Count - 1); nodes.Add(parentNode); } return nodes[0]; } // 生成哈夫曼编码函数 static Dictionary<char, string> GenerateHuffmanCode(HuffmanNode root) { Dictionary<char, string> codes = new Dictionary<char, string>(); Stack<Tuple<HuffmanNode, string>> stack = new Stack<Tuple<HuffmanNode, string>>(); stack.Push(new Tuple<HuffmanNode, string>(root, "")); while (stack.Count > 0) { Tuple<HuffmanNode, string> tuple = stack.Pop(); HuffmanNode node = tuple.Item1; string code = tuple.Item2; if (node.Left == null && node.Right == null) { codes[node.Char] = code; } if (node.Left != null) { stack.Push(new Tuple<HuffmanNode, string>(node.Left, code + "0")); } if (node.Right != null) { stack.Push(new Tuple<HuffmanNode, string>(node.Right, code + "1")); } } return codes; } // 打印哈夫曼树 static void PrintHuffmanTree(HuffmanNode node, string indent = "") { if (node != null) { Console.WriteLine(indent + node.Freq); if (node.Left != null) { PrintHuffmanTree(node.Left, indent + " "); } if (node.Right != null) { PrintHuffmanTree(node.Right, indent + " "); } } } } } ``` 该程序首先定义了一个 `HuffmanNode` 类来表示哈夫曼树节点,包括字符、频率和左右子树。然后定义了 `BuildHuffmanTree` 函数来构造哈夫曼树,该函数接受两个数组作为输入,分别为字符和频率。函数首先根据字符和频率构造叶子节点,然后将这些节点作为初始节点列表,循环进行以下操作:从节点列表中选取频率最小的两个节点作为左右子节点,生成一个新的父节点,将父节点加入节点列表中。最终生成的哈夫曼树即为节点列表中的唯一节点,函数返回该节点。这个构造哈夫曼树的过程与教材上的描述相同。 接下来定义了 `GenerateHuffmanCode` 函数来生成哈夫曼编码,该函数接受哈夫曼树的根节点作为输入。函数通过深度优先遍历哈夫曼树,将从根节点到每个叶子节点的路径表示为 0 或 1 的编码,保存在一个字典中,键为字符,值为该字符的编码。这个生成哈夫曼编码的过程与教材上的描述相同。 最后在 `Main` 函数中定义了两个数组作为测试输入,然后调用 `BuildHuffmanTree` 和 `GenerateHuffmanCode` 函数,最终输出生成的哈夫曼树和哈夫曼编码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值