Пример #1
0
        /// <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
        }
Пример #2
0
        /// <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
        }
Пример #3
0
        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();
        }