/// <summary> /// 插入指定位置上的元素到相应的列表当中 /// </summary> /// <param name="at"></param> /// <param name="n"></param> /// <param name="data"></param> /// <returns></returns> public int ArrInsert(ArrType at, int n, DATA data) { //int i; if (at.listLen >= MAXLEN) { //循序表结点已经超过了最大的数量 Console.WriteLine("顺序表已满,不能插入结点!"); return(0); } if (n < 1 || n > at.listLen - 1) { //插入的序号不正确 Console.WriteLine("插入序号错误,不能插入相应的元素!"); return(0);//返回0,表示插入不成功 } //满足上面2个条件,执行插入元素的逻辑代码 for (int i = at.listLen; i >= n; i--) { at.listData[i + 1] = at.listData[i]; } //将顺序表中的数据向后移动 at.listData[n] = data; //完成循环之后,插入结点 at.listLen++; //操作完成之后顺序表的结点数量加1 return(1); //成功插入元素,返回1 }
/// <summary> /// 增加元素到顺序表的尾部 /// </summary> /// <param name="at"></param> /// <param name="data"></param> /// <returns></returns> public int ArrAdd(ArrType at, DATA data) { if (at.listLen >= MAXLEN) { //表示顺序表已满 Console.WriteLine("顺序表已经满了,不能再添加结点了!"); return(0); } at.listData[at.listLen++] = data; //注意,必须是要at.listLen++ 而不是++at.listLen,否则回报空指针错误 return(1);//操作成功,返回1 }
static void Main(string[] args) { //Console.WriteLine(); int i; ArrType at = new ArrType(); //定义顺序列表变量 DATA pdata; //定义结点保存引用类型变量 String key; //保存关键字 Console.WriteLine("顺序表的操作演示:"); at.ArrTypeInit(at); //初始化顺序表 Console.WriteLine("初始化顺序表完成:"); do { //循环添加节点数据 String input = Console.ReadLine(); DATA data = new DATA(); input = input.Trim(); data.key = input.Split(new char[] {})[0].Trim(); data.name = input.Split(new char[] { })[1].Trim(); data.age = Int32.Parse(input.Split(new char[] { })[2].Trim()); if (data.age != 0)//若年龄不为0 { if (at.ArrAdd(at, data) == 0) { //若添加结点失败 break;//退出死循环 } } else { //若年龄为0,退出死循环 break; } }while(true); Console.WriteLine("\n顺序表中的结点的顺序为:\n"); at.showAll(at);//显示所有结点的顺序 Console.WriteLine("\n要取出的结点的序号:"); i = Int32.Parse(Console.ReadLine().Trim()); //输入结点的序列号 pdata = at.ArrFindByNum(at, i); //按照序号查找结点 if (pdata != null) //若返回的结点的引用不为null { Console.WriteLine(string.Format("第{0}个结点为:({1},{2},{3}) ", i, pdata.key, pdata.name, pdata.age)); } else { Console.WriteLine(string.Format("节点序号为{0}的结点不存在!!!", i)); } Console.WriteLine("\n要查找的关键字:"); key = Console.ReadLine().Trim(); i = at.ArrFindByCount(at, key); pdata = at.ArrFindByNum(at, i); if (pdata != null) //若返回的结点的引用不为null { Console.WriteLine(string.Format("第{0}个结点为:({1},{2},{3}) ", i, pdata.key, pdata.name, pdata.age)); } else { Console.WriteLine(string.Format("节点序号为{0}的结点不存在!!!", i)); } Console.ReadKey(); }