読み込んでいます...

线性表是数据结构中最基础也是最常用的一种数据结构,在应用程序开发中,常常会使用到线性表进行线性操作,线性表的操作比较容易,这里举两个线性表的例子进行线性操作。

1.将线性表(a0,a1,a2,a3)重新以a0为界限进行排列并分为两部分,在执行了操作之后,线性表中a0前面全部都是比a0小的数值,而在a0之后全部都是比a0大的数值,如下图所示。

注意这里并不是排序,而是划分,在进行划分之前,同样需要创建一个顺序表(要不怎么划分?),具体的创建过程在不同的语言中表现形式也不同,这里用是C#描述当然是用C#进行划分咯,创建顺序表代码如下。

public class SqList  
{  
    
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控件,用于呈现列表的,下面是一个按钮控件用于进行排序,当窗体初次加载时,需要加载顺序表中的内容,代码如下所示。

public SqList list = new SqList();  
  
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控件中,在初始化后,可以直接编写事件,代码如下所示。

private void button1_Click(object sender, EventArgs e)  
{  
    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中进行保存,示例代码如下所示。

private SqList Sort(SqList list)  
{  
    
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按钮后,就能够执行划分并呈现在相应的控件中了。

338路过 4评论 数据结构 阅读全文..
  1. Vincent @

    看上去还蛮不错的,支持一下。

  2. 农民李威 @

    书出版了啊。不错。专业书籍真贵啊。

  3. 诡异的西红柿 @

    [q]书出版了啊。不错。专业书籍真贵啊。[/q]
    呵呵,还好啦,我这算是便宜的了。。

  4. 置顶的更新,文章汇总 : GuoJing's Blog | 用心对待每一行代码 @

    [...] 潜心学习数据结构 – C#语言描述(二:顺序表应用) [...]

:-D :-? 8) :cry: 8-O :lol: :-x :-| :?: :-P :oops: :roll: :( :) :-o :wink: more »