技术文章 > 其他资料 > C#数据结构----顺序表操作

       很多朋友都在为C#数据结构这个问题烦恼,市场上没有关于C#数据结构的书籍和资料基本没有,网上的资料也凌乱,在这里我将发布一些数据结构的基本操作代码,代码采用C#实现数据结构的算法,希望我的文章及代码可以帮助到大家学习使用C#来实现数据结构的各种算法。由于工作和别的原因,代码写得很不规范,但我自己把下面的方法块都测试了下没发现错误。

 

如果你在学习中发现我的方法有什么错误请留下你宝贵的意见。

 

线性表的定义:

 

  n个数据元素的有限序列(线性表的数据元素在不同的环境下具体含义可以不同,但在同一线性表

 

  中的元素性质必须相同)。

 

  表长:线性表中数据元素的个数nn>=0)。

 

  空表:n=0时的线性表称为空表。

 

  位序:非空表中数据元素ai是此表的第i个元素,则称iai在线性表中的位序。

 

线性表的结构特点:在数据元素的非空有限集中有如下规则

 

  1.存在唯一的一个被称作“第一个”的数据元素

 

  2.存在唯一的一个被称作“最后一个”的数据元素

 

  3.除第一个外,集合中的每个数据元素均只有一个前驱

 

  4.除最后一个外,集合中的每个数据元素均只有一个后继

 

线性表的运算:

 

  1.取元素:求线性表中指定数据元素的位序。

 

  2.插入:在线性表两个确定的元素之间插入一个新的数据元素。

 

  3.删除:删除表中某个数据元素。

 

  4.求表长:求线性表中数据元素的个数。

 

  5.查找:查找表中满足某种条件的数据元素。

 

  6.合并:把两个线性表合并成一个线性表。

 

  7.分拆:把一个线性表分拆成多个线性表。

 

  8.排序:按一个或多个数据项值的递增或递减次序重新排列表中数据元素。

 

在线性表中最常见的是顺序表,我写了一个关于顺序表的基本操作的类,代码我贴在下面:

 

using System;

using System.Collections.Generic;

using System.Text;

 

namespace classfile

{

    class sxb

    {

        public const int defaultsize = 100;  /*定义顺序表的默认元素数目为1000*/

        public int maxsize;

        public int size;

        public int[] list;

        //定义x,y的变量

        public int _x;

        public int _y;

        //定义x,y的属性

        //public int x

        //{

        //    get { return _x; }

        //    set { return _x = value;}

        //}

        //public int y

        //{

        //    get { return _y; }

        //    set { return _y = value; }

        //}

        public sxb()

        {

            initiatelist (defaultsize );

 

        }

        public sxb(int size)

        {

            initiatelist (size );

        }

        //初始化顺序表

        public void initiatelist(int sz)

        {

            maxsize = sz;

            size = 0 ;

            list = new int[sz];

        }

            

        //顺序表插入算法,无返回值

        public void insertsxb(int i, int x)

        {

            if (size == maxsize)

            {

                throw new Exception("顺序表已满,无法插入!");

            }

            if (i < 0 || i > size)

            {

                throw new Exception("参数错误!");

            }

            for (int j = size - 1; j >= i - 1; j--)

            {

                list[j + 1] = list[j];//改成list[j] = list[j-1] 

            }

            list[i - 1] = x;

            //size是线行表的长度大小 数据插入长度要+1

            size++;

        }

        //定义删除顺序表中x--y间元素的方法

        public int DeleteXY(int x,int y)

        {

            for (int i = _x; i < _y; i++)

            {

 

            }

            return 0;

        }

 

        //顺序表删除算法,返回删除的元素

        public int delete(int i)

        {

            //size是线行表的长度大小

            if (size == 0)

            {

                throw new Exception("顺序表已为空无法删除!");

            }

            if (i < 0 || i > size - 1)

            {

                throw new Exception("参数错误!");

            }

            int it = list[i];

            for (int j = i; j < size - 1; j++)

            {

                list[j] = list[j + 1];

 

            }

            size--;

            return it;

        }

        //获取顺序表的元素i,返加元素i的值

        public int getdata(int i)

        {

            if (i < 0 || i >= size)

            {

                throw new Exception("参数错误!");

            }

            return list[i];

        }

        //获取顺序表的长度

        public int sizelist()

        {

            return size;

        }

        //判断顺序表是否为空,为空返回true,否则返回false

        public bool isempty()

        {

            return size == 0;

        }

 

        //请问:该函数的功能 ???

        public int moredatadelete(sxb l, int x)

        {

            int i;

            int tag = 0;

            for (i = 0; i < l.size; i++)

            {

                if (x.Equals(l.getdata(i)))

                {

                    l.delete( i );

                    i--; 

                    tag = 1;

                }

            }

            return tag;

        }

    }

}

 

 

发表于 2009-4-29 1:57:06 | By 阅读(346)

文章评论列表

发表评论

验证码(必填)  
姓名
内容  

Top