线性表是数据结构中最基础也是最常用的一种数据结构,在应用程序开发中,常常会使用到线性表进行线性操作,线性表的操作比较容易,这里举两个线性表的例子进行线性操作。
1.将线性表(a0,a1,a2,a3)重新以a0为界限进行排列并分为两部分,在执行了操作之后,线性表中a0前面全部都是比a0小的数值,而在a0之后全部都是比a0大的数值,如下图所示。

注意这里并不是排序,而是划分,在进行划分之前,同样需要创建一个顺序表(要不怎么划分?),具体的创建过程在不同的语言中表现形式也不同,这里用是C#描述当然是用C#进行划分咯,创建顺序表代码如下。
{
const int max = 10;
public int[] data = new int[max];
public int last;
public void CreateSqList()
{
this.data[0] = 30;
this.data[1] = 25;
this.data[2] = 42;
this.data[3] = 15;
this.data[4] = 31;
this.data[5] = 12;
this.data[6] = 17;
this.data[7] = 96;
this.data[8] = 1;
this.data[9] = 100;
}
}
上述代码创建了一个顺序表,这里有一个CreateSqList()方法用于初始化赋值,在创建完成后,还需要创建一个应用程序窗体方便查看,如下图所示。

OK,这里上面呢是一个list控件,用于呈现列表的,下面是一个按钮控件用于进行排序,当窗体初次加载时,需要加载顺序表中的内容,代码如下所示。
private void Form1_Load(object sender, EventArgs e)
{
list.CreateSqList();
for (int i = 0; i < 10; i++)
{
listBox1.Items.Add(list.data[i]);
}
}
上述代码创建了一个公共的list对象并在加载时进行初始化,让后将list中的数据显式在listBox控件中,在初始化后,可以直接编写事件,代码如下所示。
{
listBox1.Items.Clear();
Sort(list);
for (int i = 0; i < 10; i++)
{
listBox1.Items.Add(list.data[i]);
}
}
上面的代码就非常简单了,首先清除现有的控件中的值,清除完毕后再执行Sort方法进行划分,划分完成后再次呈现,那么这里最重要的就是Sort方法咯,Sort方法的实现很简单。
- 首先比较第一个元素和下面的元素的大小,如果大小相同或下面的元素比上面的元素要大,那么就不需要排序。
- 依次查询,比较当前值与下面的元素的大小,如果下面元素的大小要比上面的元素要小,那么首先将上面的元素依次移动到下面的元素中,然后将小的元素赋值到第一个元素中。
那么这里就需要在划分方法中设置两个变量,这两个变量分别为x和temp,x用于存放第一个元素的值,因为排序之后,不可能每次都从第一个值中读取数据,在排序时需要从x(保存第一个值的变量)读取并进行对比,而在移动时,最后一个值会被覆盖,所以在执行移动时,首先需要将最后一个值存放在temp中进行保存,示例代码如下所示。
{
int x = list.data[0];
int temp = 0;
for (int i = 1; i < list.data.Length; i++)
{
if (list.data[i] < x)
{
temp = list.data[i];
for (int j = i-1; j >=0; j–)
{
list.data[j+1] = list.data[j];
}
list.data[0] = temp;
}
}
return list;
}
上述代码就执行了一个划分算法,运行后如下图所示。

当单击Sort按钮后,就能够执行划分并呈现在相应的控件中了。
看上去还蛮不错的,支持一下。
书出版了啊。不错。专业书籍真贵啊。
[q]书出版了啊。不错。专业书籍真贵啊。[/q]
呵呵,还好啦,我这算是便宜的了。。
[...] 潜心学习数据结构 – C#语言描述(二:顺序表应用) [...]