ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【C#】实现静态数组、动态数组

2022-01-27 13:02:03  阅读:283  来源: 互联网

标签:index C# res 静态 int 数组 data public


任务

静态数组的实现任务

实现目标:(1)实现一个静态数组

     (2)数组可以增,删,改,查;

     (3)可以输出数组信息;

实现过程:

(1)创建一个新的类,包含字段元素存储,元素个数;

(2)创建构造函数,分别是一个参数的构造函数与无参数的构造函数;

(3)实现增功能,允许按照下标添加;

(4)实现查询功能,按照下标查询,按照给出元素查询;

(5)实现删除功能,按照下标删除某个元素,按照给出元素删除,删除所有元素;

(7)实现修改功能,按照下标修改,按照给出元素修改;

(8)实现输出函数;

 

动态数组的实现任务

实现目标:(1)对静态数组容量进行修改,使得数组可以通过实际存储的数据多少进行改变。

实现过程:(1)在原有的静态数组上新增一个自动扩容缩容的方法

重点:

(1)无参构造函数的实现方法

 

1 public Array1() : this(10) { }
2         //与上面无参数函数等价
3         //public Array1()
4         //{
5         //    data = new int[10];
6         //    N = 0;
7         //}
View Code

(2)ToString()方法的重写

 1 /// <summary>
 2         /// 重写ToString方法否则不能正常输出
 3         /// </summary>
 4         /// <returns></returns>
 5         public override string ToString()
 6         {
 7             //实例化
 8             StringBuilder res = new StringBuilder();
 9             //重写格式1:输出数组元素个数以及长度
10             res.Append(string.Format("Array1:   count={0}    capacity={1}\n",N,data.Length));
11             res.Append('[');
12             //输出元素
13             for (int i = 0; i < N; i++)
14             {
15                 res.Append(data[i]);
16                 if (i!=N-1)
17                 {
18                     res.Append(',');
19                 }
20             }
21             res.Append(']'+"\n");
22             //返回
23             return res.ToString();
24         }
25     }
View Code

(3)动态数组扩容缩容实现方法1

 1         /// <summary>
 2         /// 扩容缩容数组
 3         /// </summary>
 4         /// <param name="newcapacity"></param>
 5         private void ResetCapacity(int newcapacity)
 6         {
 7             int[] newdata = new int[newcapacity];
 8             for (int i = 0; i < N; i++)
 9             {
10                 newdata[i] = data[i]; 
11             }
12             data = newdata;
13         }
View Code

 

完整代码:

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 
  7 namespace DataStructrue
  8 {
  9     class Array1
 10     {
 11         /// <summary>
 12         /// 数组的元素存储
 13         /// </summary>
 14         private int[] data;
 15         /// <summary>
 16         /// 数组元素数量
 17         /// </summary>
 18         private int N;
 19 
 20         public Array1(int capacity)
 21         {
 22             data = new int[capacity];
 23             N = 0;
 24         }
 25         public Array1() : this(10) { }
 26         //与上面无参数函数等价
 27         //public Array1()
 28         //{
 29         //    data = new int[10];
 30         //    N = 0;
 31         //}
 32         
 33         /// <summary>
 34         /// 在某位置添加新元素
 35         /// </summary>
 36         /// <param name="index"></param>
 37         /// <param name="d"></param>
 38         public void Add(int index,int d)
 39         {
 40             if (index>N || index <0)
 41             {
 42                 throw new ArgumentException("数组索引越界");
 43             }
 44             else if (N==data.Length)
 45             {
 46                 ResetCapacity(2*N);
 47             }
 48             for (int i = N; i >= index; i--)
 49             {
 50                 if (N != data.Length-1)
 51                 {
 52                     data[i + 1] = data[i];
 53                 }
 54             }
 55             data[index] = d;
 56             N++;
 57         }
 58         public void Addlast(int d)
 59         {
 60             Add(N, d);
 61         }
 62         /// <summary>
 63         /// 删除下标元素
 64         /// </summary>
 65         /// <param name="index"></param>
 66         public void RemoveAt(int index)
 67         {
 68             if (index > N || index < 0)
 69             {
 70                 throw new ArgumentException("数组索引越界");
 71             }
 72             for (int i = index; i < N; i++)
 73             {
 74                 data[i] = data[i + 1];
 75             }
 76             N--;
 77             if (N==(data.Length/4))
 78             {
 79                 ResetCapacity(data.Length / 2);
 80             }
 81             data[N] = default;
 82         }
 83         /// <summary>
 84         /// 删除特定元素
 85         /// </summary>
 86         /// <param name="d"></param>
 87         public void Remove(int d)
 88         {
 89             if (Find(d)!=-1)
 90             {
 91                 RemoveAt(Find(d));
 92             }
 93         }
 94         public void RemoveLast()
 95         {
 96             RemoveAt(N - 1);
 97         }
 98         /// <summary>
 99         /// 清空数组
100         /// </summary>
101         public void Clear()
102         {
103             for (int i = N-1; i >=0; i--)
104             {
105                 data[i] = default;
106                 N--;
107             }
108         }
109         /// <summary>
110         /// 查询特定元素
111         /// </summary>
112         /// <param name="d"></param>
113         /// <returns></returns>
114         public int Find(int d)
115         {
116             for (int i = 0; i < N; i++)
117             {
118                 if (data[i] == d)
119                 {
120                     return i;
121                 }
122             }
123             return -1;
124         }
125         /// <summary>
126         /// 查询是否包含元素
127         /// </summary>
128         /// <param name="d"></param>
129         /// <returns></returns>
130         public bool Contain(int d)
131         {
132             if (Find(d)==-1)
133             {
134                 return false;
135             }
136             return true;
137         }
138         /// <summary>
139         /// 修改元素
140         /// </summary>
141         /// <param name="index"></param>
142         /// <param name="d"></param>
143         public void Change(int index,int d)
144         {
145             if (index > N || index < 0)
146             {
147                 throw new ArgumentException("数组索引越界");
148             }
149             data[index] = d;
150         }
151         /// <summary>
152         /// 扩容缩容数组
153         /// </summary>
154         /// <param name="newcapacity"></param>
155         private void ResetCapacity(int newcapacity)
156         {
157             int[] newdata = new int[newcapacity];
158             for (int i = 0; i < N; i++)
159             {
160                 newdata[i] = data[i]; 
161             }
162             data = newdata;
163         }
164         /// <summary>
165         /// 重写ToString方法否则不能正常输出
166         /// </summary>
167         /// <returns></returns>
168         public override string ToString()
169         {
170             //实例化
171             StringBuilder res = new StringBuilder();
172             //重写格式1:输出数组元素个数以及长度
173             res.Append(string.Format("Array1:   count={0}    capacity={1}\n",N,data.Length));
174             res.Append('[');
175             //输出元素
176             for (int i = 0; i < N; i++)
177             {
178                 res.Append(data[i]);
179                 if (i!=N-1)
180                 {
181                     res.Append(',');
182                 }
183             }
184             res.Append(']'+"\n");
185             //返回
186             return res.ToString();
187         }
188     }
189 }
View Code

标签:index,C#,res,静态,int,数组,data,public
来源: https://www.cnblogs.com/yotomib/p/15849462.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有