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
        }
    }
}

窗体设计

窗体设计如下:
包含建立顺序表、输出顺序表、插入元素、删除元素、求顺序表长度、删除元素、按元素查找序号、按序号查找元素

代码实现

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 = "";
            
          }
      
        }
    }

效果展示

在这里插入图片描述
程序下载(包含顺序表、单链表、顺序栈、冒泡排序、折半查找):https://download.csdn.net/download/HAIIAKU/20672183

C#中,顺序表通常是通过数组来实现的。下面将介绍如何使用C#实现顺序表基本运算。 1. 建立顺序表:创建一个数组来存储顺序表的元素。 ```csharp public class SeqList<T> { private T[] _array; // 存储顺序表元素的数组 private int _size; // 顺序表当前大小 public SeqList(int capacity) { _array = new T[capacity]; _size = 0; } } ``` 2. 输出顺序表:遍历数组并打印每个元素。 ```csharp public void PrintList() { for (int i = 0; i < _size; i++) { Console.Write(_array[i] + " "); } Console.WriteLine(); } ``` 3. 求顺序表长度:返回顺序表当前元素数量。 ```csharp public int Length() { return _size; } ``` 4. 按序号查找元素:根据给定的序号返回对应的元素。 ```csharp public T GetElement(int index) { if (index < 0 || index >= _size) { throw new ArgumentOutOfRangeException("序号超出范围"); } return _array[index]; } ``` 5. 按元素查找序号:返回元素在顺序表中的位置。 ```csharp public int LocateElement(T element) { for (int i = 0; i < _size; i++) { if (_array[i].Equals(element)) { return i; } } return -1; // 未找到返回-1 } ``` 6. 插入元素:在指定位置插入新元素。 ```csharp public void Insert(int index, T element) { if (index < 0 || index > _size) { throw new ArgumentOutOfRangeException("插入位置不合法"); } if (_size >= _array.Length) { Resize(); } for (int i = _size; i > index; i--) { _array[i] = _array[i - 1]; } _array[index] = element; _size++; } ``` 7. 删除元素:删除指定位置的元素。 ```csharp public void Delete(int index) { if (index < 0 || index >= _size) { throw new ArgumentOutOfRangeException("删除位置不合法"); } for (int i = index; i < _size - 1; i++) { _array[i] = _array[i + 1]; } _size--; } ``` 在顺序表的操作中,如果数组空间不足,可能需要对数组进行扩容操作,即`Resize()`方法,这里没有给出具体实现
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风风疯风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值