迎接2012之集合和泛型(1)------线性表的顺序结构基本实现
来源:互联网 发布:多玩我的世界工业js 编辑:程序博客网 时间:2024/06/05 20:10
一、非泛型实现
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Data;using System.Data.SqlClient;using System.Text.RegularExpressions;using System.Reflection;namespace ConsoleApplication{ class Program { static void Main(string[] args) { ArrayList ary = new ArrayList(10); ary.Add(3); ary.Add(5); ary.Add(4, 1); for (int i = 0; i < ary.count; i++) { Console.WriteLine(ary[i]); } ary.Remove(4); for (int i = 0; i < ary.count; i++) { Console.WriteLine(ary[i]); } ary.RemoveAt(1); for (int i = 0; i < ary.count; i++) { Console.WriteLine(ary[i]); } } } /// <summary> /// 线性表的顺序结构基本实现(非泛型) /// </summary> public class ArrayList { /// <summary> /// 存放元素的数组 /// </summary> public object[] array; /// <summary> /// 存放实际的元素个数 /// </summary> public int count; /// <summary> /// 存放线性表的容量 /// </summary> public int capcity; /// <summary> /// 默认的构造函数 /// </summary> public ArrayList() { this.array = new object[0]; this.capcity = 0; this.count = 0; } /// <summary> /// 构造函数重载 /// </summary> /// <param name="capcity"></param> public ArrayList(int capcity) { this.array = new object[capcity]; this.capcity = capcity; this.count = 0; } /// <summary> /// 判断是否为空 /// </summary> /// <returns></returns> private bool Empty() { return this.count == 0; //元素个数是否等于0 } /// <summary> /// 判断是否为满 /// </summary> /// <returns></returns> private bool Fill() { return this.count == this.capcity;//元素个数是否等于线性表的容器 } /// <summary> /// 索引 /// </summary> /// <param name="index"></param> /// <returns></returns> public object this[int index] { get { if (index < 0 || index > this.count) { return ""; } else { return this.array[index]; } } set { if (index < 0 || index > this.count) { this.array[index] = ""; } else { this.array[index] = value; } } } /// <summary> /// 扩大容器 /// </summary> private void Dilatation() { //将数组个数扩大为原来的两倍 object[] newarray = new object[this.capcity * 2]; for (int i = 0; i < this.array.Length; i++) { newarray[i] = this.array[i]; } this.array = newarray; } /// <summary> /// 增加元素 /// </summary> /// <param name="obj"></param> public void Add(object obj) { //判断是否为满,满的话扩容,最后就是添加元素 if (Fill()) { Dilatation(); } this.array[count] = obj; this.count++; } /// <summary> /// 增加元素到指定的位置 /// </summary> /// <param name="obj"></param> /// <param name="index"></param> public void Add(object obj, int index) { if (Fill()) { Dilatation(); } if (index < 0 || index > this.count) { Console.WriteLine("插入位置不正确"); return; } //位置后移 for (int i = index; i < this.count; i++) { this.array[i + 1] = this.array[i]; } this.array[index] = obj; this.count++; } /// <summary> /// 查找元素是否存在 /// </summary> /// <param name="obj"></param> /// <returns></returns> public bool Contains(object obj) { bool b = false; for (int i = 0; i < this.count; i++) { if (this.array[i].Equals(obj)) { b = true; break; } } return b; } /// <summary> /// 查找元素的位置,如果不存在返回-1 /// </summary> /// <param name="obj"></param> /// <returns></returns> public int IndexOf(object obj) { int i = -1; for (int j = 0; j < this.count; j++) { if (this.array[j].Equals(obj)) { i = j; break; } } return i; } /// <summary> /// 删除元素 /// </summary> /// <param name="obj"></param> public void Remove(object obj) { int index = IndexOf(obj); if (index != -1) { //位置前移 for (int i = index; i < this.count - 1; i++) { this.array[i] = this.array[i + 1]; } this.count--; } else { Console.WriteLine("该元素不存在"); } } /// <summary> /// 删除指定位置的元素 /// </summary> /// <param name="index"></param> public void RemoveAt(int index) { if (this.Empty()) { Console.WriteLine("元素为空"); } if (index < 0 || index > this.count) { Console.WriteLine("删除位置不正确"); return; } //位置前移 for (int i = index; i < this.count - 1; i++) { this.array[i] = this.array[i + 1]; } this.count--; } }}
二、泛型实现
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Data;using System.Data.SqlClient;using System.Text.RegularExpressions;using System.Reflection;namespace ConsoleApplication{ class Program { static void Main(string[] args) { ArrayList<int> ary = new ArrayList<int>(10); ary.Add(3); ary.Add(5); ary.Add(4, 1); for (int i = 0; i < ary.count; i++) { Console.WriteLine(ary[i]); } ary.Remove(4); for (int i = 0; i < ary.count; i++) { Console.WriteLine(ary[i]); } ary.RemoveAt(1); for (int i = 0; i < ary.count; i++) { Console.WriteLine(ary[i]); } } } /// <summary> /// 线性表的顺序结构基本实现(泛型) /// </summary> public class ArrayList<T> { /// <summary> /// 存放元素的数组 /// </summary> public T[] array; /// <summary> /// 存放实际的元素个数 /// </summary> public int count; /// <summary> /// 存放线性表的容量 /// </summary> public int capcity; /// <summary> /// 默认的构造函数 /// </summary> public ArrayList() { this.array = new T[0]; this.capcity = 0; this.count = 0; } /// <summary> /// 构造函数重载 /// </summary> /// <param name="capcity"></param> public ArrayList(int capcity) { this.array = new T[capcity]; this.capcity = capcity; this.count = 0; } /// <summary> /// 判断是否为空 /// </summary> /// <returns></returns> private bool Empty() { return this.count == 0; //元素个数是否等于0 } /// <summary> /// 判断是否为满 /// </summary> /// <returns></returns> private bool Fill() { return this.count == this.capcity;//元素个数是否等于线性表的容器 } /// <summary> /// 索引 /// </summary> /// <param name="index"></param> /// <returns></returns> public T this[int index] { get { if (index < 0 || index > this.count) { new System.ArgumentOutOfRangeException(); } return this.array[index]; } set { if (index < 0 || index > this.count) { new System.ArgumentOutOfRangeException(); } this.array[index] = (T)value; } } /// <summary> /// 扩大容器 /// </summary> private void Dilatation() { //将数组个数扩大为原来的两倍 T[] newarray = new T[this.capcity * 2]; for (int i = 0; i < this.array.Length; i++) { newarray[i] = this.array[i]; } this.array = newarray; } /// <summary> /// 增加元素 /// </summary> /// <param name="obj"></param> public void Add(T obj) { //判断是否为满,满的话扩容,最后就是添加元素 if (Fill()) { Dilatation(); } this.array[count] = obj; this.count++; } /// <summary> /// 增加元素到指定的位置 /// </summary> /// <param name="obj"></param> /// <param name="index"></param> public void Add(T obj, int index) { if (Fill()) { Dilatation(); } if (index < 0 || index > this.count) { Console.WriteLine("插入位置不正确"); return; } //位置后移 for (int i = index; i < this.count; i++) { this.array[i + 1] = this.array[i]; } this.array[index] = obj; this.count++; } /// <summary> /// 查找元素是否存在 /// </summary> /// <param name="obj"></param> /// <returns></returns> public bool Contains(T obj) { bool b = false; for (int i = 0; i < this.count; i++) { if (this.array[i].Equals(obj)) { b = true; break; } } return b; } /// <summary> /// 查找元素的位置,如果不存在返回-1 /// </summary> /// <param name="obj"></param> /// <returns></returns> public int IndexOf(T obj) { int i = -1; for (int j = 0; j < this.count; j++) { if (this.array[j].Equals(obj)) { i = j; break; } } return i; } /// <summary> /// 删除元素 /// </summary> /// <param name="obj"></param> public void Remove(T obj) { int index = IndexOf(obj); if (index != -1) { //位置前移 for (int i = index; i < this.count - 1; i++) { this.array[i] = this.array[i + 1]; } this.count--; } else { Console.WriteLine("该元素不存在"); } } /// <summary> /// 删除指定位置的元素 /// </summary> /// <param name="index"></param> public void RemoveAt(int index) { if (this.Empty()) { Console.WriteLine("元素为空"); } if (index < 0 || index > this.count) { Console.WriteLine("删除位置不正确"); return; } //位置前移 for (int i = index; i < this.count - 1; i++) { this.array[i] = this.array[i + 1]; } this.count--; } }}
- 迎接2012之集合和泛型(1)------线性表的顺序结构基本实现
- 迎接2012之集合和泛型(2)------线性表的链式结构基本实现
- 迎接2012之集合和泛型(3)------栈的顺序结构基本实现
- 迎接2012之集合和泛型(5)------队列的顺序结构基本实现
- 迎接2012之集合和泛型(4)------栈的链式结构基本实现
- 迎接2012之集合和泛型(6)------队列的链式结构基本实现
- 利用顺序结构实现线性表的基本操作
- 顺序结构实现线性表的基本操作
- C++实现顺序结构线性表的基本操作
- 编程实现顺序存储结构和链式存储结构线性表的建立、查找、插入、删除等基本操作
- 线性表之顺序表的结构与实现
- 线性结构之顺序表------C实现
- 线性表的顺序存储结构的表示和实现
- 线性表的顺序存储结构和实现
- 线性表的顺序表示和基本操作的实现
- 线性表的顺序表示和实现基本操作之插入元素
- 顺序结构线性表的实现
- c++实现线性表的顺序结构
- java设计模式--单例模式--概述01
- ios利用MKMapView实现简单的地图
- oracle 常用sql语句
- PHP APC基本使用 (Alternative PHP Cache(可选PHP缓存))
- Eclipse环境中配置Editor代码格式、xml格式方法步骤
- 迎接2012之集合和泛型(1)------线性表的顺序结构基本实现
- SqlServer资料收集
- 【转】C#窗体中Invoke和BeginInvoke方法详解(二)
- 使用私有api改变UIPopoverController的边框背景
- 使用HttpClient实现申通快递查询
- 记支付宝面试的几道题
- 获取table的tr和td值
- 如何通过无线网络连接adb
- 网络七层的功能