//顺序表
//---------------------------------------------------------------
//-----------------------------------------------------------------
//-------------------------------------------------------------------
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