c#实现顺序表(winform程序)

顺序表类

 //顺序表
    //---------------------------------------------------------------
    //-----------------------------------------------------------------
    //-------------------------------------------------------------------
    class SqListClass
    {
        const int MaxSize = 100;//限制线性表最大容量位100
        public string[] data;		    //存放顺序表中元素
        public int length;			    //存放顺序表的长度
     


        //初始化顺序表
        public SqListClass()
        {
            data = new string[MaxSize];
            length = 0;
           
        }


        //由split中的元素建立顺序表
        public void CreateList(string[] split)
        {
            int i;
           //无序顺序表
            for (i = 0; i < split.Length; i++)
                data[i] = split[i];
            length = i;
        }


        //将顺序表L中的所有元素构成一个字符串返回
        public string DispList()
        {
            int i;
            if (length > 0)
            {
                string mystr = data[0];
                for (i = 1; i < length; i++)	//扫描顺序表中各元素值
                    mystr += " " + data[i];
                return mystr;
            }
            else return "空串";
        }


        //求顺序表的长度
        public int ListLength()
        {
            return length;
        }


        //求线性表中某序号的元素值
        public bool GetElem(int i, ref string e)
        {
            if (i < 1 || i > length)
                return false;			        //参数错误时返回false
            e = data[i - 1];				    //取元素值
            return true;				        //成功找到元素时返回true
        }


        //按元素值查找其序号
        public int LocateElem(string e)
        {
            int i = 0;
            while (i < length && string.Compare(data[i], e) != 0)
                i++;					        //查找元素e
            if (i >= length)			        //未找到时返回0
                return 0;
            else
                return i + 1;			        //找到后返回其逻辑序号
        }


        //插入数据元素
        public bool ListInsert(int i, string e)
        {
            int j;
            if (i < 1 || i > length + 1)
                return false;			        //参数错误时返回false
            for (j = length; j >= i; j--)	    //将data[i-1]及后面元素后移一个位置
                data[j] = data[j - 1];
            data[i - 1] = e;				        //插入元素e
            length++;				            //顺序表长度增1
            return true;				        //成功插入返回true
        }




        //删除数据元素
        public bool ListDelete(int i, ref string e)
        {
            int j;
            if (i < 1 || i > length)		    //参数错误时返回false
                return false;
            e = data[i];
            for (j = i - 1; j < length - 1; j++)	//将data[i]之后的元素前移一个位置
                data[j] = data[j + 1];
            length--;				            //顺序表长度减1
            return true;				        //成功删除返回true
        }
    }
}

窗体设计

窗体设计如下:
c#实现顺序表(winform程序)_第1张图片

代码实现

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Sqlist
{
    public partial class Form2 : Form
    {
          SqListClass L = new SqListClass();
        public Form2()
        {
            InitializeComponent();
        }

        internal void show()
        {
            throw new NotImplementedException();
        }


         private void Form2_Load(object sender, EventArgs e)
          {
              //实现在未输入时无法按键
              button1.Enabled = true;
              button2.Enabled = false;
              button3.Enabled = false;
              button4.Enabled = false;
              button6.Enabled = false;
              button7.Enabled = false;
              button8.Enabled = false;
          }

          //输入元素
          private void button1_Click(object sender, EventArgs e)
          {
              string str = textBox1.Text.Trim();
              if (str == "")
                  MessageBox.Show("请输入元素,否则无法进行运算", "信息提示", MessageBoxButtons.OK);
              else
              {
                  string[] split = str.Split(new Char[] { ' ', ',', '.', ':' });//视线多种符号分割字符串
                  L.CreateList(split);
                  button1.Enabled = true;
                  button2.Enabled = true;
                  button3.Enabled = true;
                  button4.Enabled = true;
                  button6.Enabled = true;
                  button7.Enabled = true;
                  button8.Enabled = true;
                  label8.Text = "操作提示:成功创建顺序表";
               
               
              }
          }


          //输出顺序表
          private void button3_Click(object sender, EventArgs e)
          {
            
              textBox2.Text = L.DispList();
              label8.Text = "操作提示:成功输出顺序表";

          
          }

         //求顺序表长度
        private void button4_Click(object sender, EventArgs e)
        {

            textBox3.Text = L.ListLength().ToString();
            label8.Text = "操作提示:成功求得顺序表的长度";
        }
 
          //求指定序号元素
          private void button6_Click(object sender, EventArgs e)
          {
              int i; string x = "";
              if (textBox4.Text.Trim() == "")//检查是否输入序号
                MessageBox.Show("请输入需要查找元素的序号,否则无法查找", "信息提示", MessageBoxButtons.OK);
              else
              {
                  try
                  {
                      i = Convert.ToInt16(textBox4.Text.Trim());
                  }
                  catch (Exception err)
                  {
                      MessageBox.Show("输入的序号超出查找范围!", "信息提示", MessageBoxButtons.OK);//检查是否输入数字
                 
                      return;
                  }
                  if (L.GetElem(i, ref x))
                  {
                      textBox5.Text = x;
                      label8.Text = "操作提示:成功求得指定序号的元素";//得到指定序号的元素输出
                  }
                  else
                  {
                      MessageBox.Show("输入的序号超出查找范围!", "信息提示", MessageBoxButtons.OK); //序号超出范围,提示错误              
                      textBox5.Text = "";
                  }
              }

          }


          //求指定元素序号
          private void button5_Click(object sender, EventArgs e)
          {
              int i;
              string x = textBox6.Text.Trim();
              if (x == "")
                  MessageBox.Show("必须输入元素值!", "信息提示", MessageBoxButtons.OK);  //判断是否输入
              else
              {
                  i = L.LocateElem(x);//调用方法查找元素
                  if (i == 0)
                  {
                      MessageBox.Show("没有找到输入的元素!", "信息提示", MessageBoxButtons.OK); 
                      label8.Text = "操作提示:没有找到输入的元素";
                      textBox7.Text = "";
                  }
                  else
                  {
                      textBox7.Text = i.ToString();
                      label8.Text = "操作提示:成功求得指定元素的序号";
                  }
              }
          }


          //插入元素
          private void button7_Click(object sender, EventArgs e)
          {
              int i; string x, str;
              if (textBox8.Text.Trim() == "")
                  MessageBox.Show("必须输入序号!", "信息提示", MessageBoxButtons.OK); //判断是否输入序号
             
              else
              {
                  try
                  {
                      i = Convert.ToInt16(textBox8.Text.Trim());//判断是否输入的为数字
                  }
                  catch (Exception err)
                  {
                      MessageBox.Show("输入的序号是错误的!", "信息提示", MessageBoxButtons.OK);
                      label8.Text = "操作提示:输入的序号是错误的";
                      return;
                  }
                  x = textBox9.Text.Trim();//输入元素值
                  if (x == "")
                      MessageBox.Show("必须输入元素值!", "信息提示", MessageBoxButtons.OK);
                    
                  else
                  {
                      if (L.ListInsert(i, x))//调用方法插入元素
                      {
                          str = L.DispList();
                          textBox10.Text = str;
                          label8.Text = "操作提示:成功插入元素" + x;
                      }
                      else
                      {
                          label8.Text = "操作提示:输入的序号" + i.ToString() + "错误";
                          textBox10.Text = "";
                      }
                  }
              }
          }


          //删除元素
          private void button8_Click(object sender, EventArgs e)
          {
              int i; string x = "", str;
              if (textBox11.Text.Trim() == "")//判断是否输入序号
                  MessageBox.Show("必须输入序号!", "信息提示", MessageBoxButtons.OK);
               
              else
              {
                  try
                  {
                      i = Convert.ToInt16(textBox11.Text.Trim());
                  }
                  catch (Exception err)
                  {
                      MessageBox.Show("输入的序号是错误的!", "信息提示", MessageBoxButtons.OK);//判断输入的是否为数字
                      label8.Text = "操作提示:输入的序号是错误的";
                      return;
                  }
                  if (!L.ListDelete(i, ref x))
                  {
                      label8.Text = "操作提示:不能删除序号为" + i.ToString() + "的元素";
                      textBox12.Text = "";
                  }
                  else
                  {
                      str = L.DispList();//调用方法删除元素
                      textBox12.Text = str;
                      label8.Text = "操作提示:成功删除元素" + x;
                  }
              }
          }


          //清空元素
          private void button2_Click(object sender, EventArgs e)
          {
              textBox1.Text = "";
            
          }
      
        }
    }

效果展示

c#实现顺序表(winform程序)_第2张图片
程序下载(包含顺序表、单链表、顺序栈、冒泡排序、折半查找):https://download.csdn.net/download/HAIIAKU/20672183

你可能感兴趣的:(c#,数据结构)