页面不存在!






您访问的页面无法找到

3 秒后将自动跳转到导航页

请检查您输入的地址是否正确

RSS
页面不存在!






您访问的页面无法找到

3 秒后将自动跳转到导航页

请检查您输入的地址是否正确

当前位置:首页 > 网站运营 > 推广研究 > 正文

.net实现链表类 winform表现

发布时间:2010-09-09 09:00:24  来源:电脑学院
【摘要】: .net实现链表类winform表现,XList.vbviewplaincopytoclipboardPRint?'nbsp;nbsp;nbsp;'*CreatedbySharpDevelop.nbsp;nbsp;nbsp;'*User:fxnbsp;nbsp;nbsp;'*Date:2009/11/08nbsp;nbsp;nbsp;'*Time:2009年11月8日14:15:43nbsp;nbsp;nbsp;nbsp;nbsp;'nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;Import 页面不存在!






您访问的页面无法找到

3 秒后将自动跳转到导航页

请检查您输入的地址是否正确

页面不存在!






您访问的页面无法找到

3 秒后将自动跳转到导航页

请检查您输入的地址是否正确

XList.vb

view plaincopy to clipboardPRint?
'   
' * Created by SharpDevelop.   
' * User: fx   
' * Date: 2009/11/08   
' * Time: 2009年11月8日14:15:43   
  
'    
  
Imports System   
Imports System.Collections.Generic   
Imports System.Linq   
Imports System.Text   
  
'结点类   
Public Class XListItem   
    Public Sub New()   
        data = ""  
        [next] = Nothing  
    End Sub  
    Public Sub New(ByVal str As String)   
        data = str   
        [next] = Nothing  
    End Sub  
  
    Public [next] As XListItem          '类似于指针域   
    Public data As String               '数值域   
  
    '也可以用如下的属性来表示data,   
    ''Private _data As String   
  
    ''Public Property Data() As String   
    ''    Get   
    ''        Return _data   
    ''    End Get   
    ''    Set(ByVal value As String)   
    ''        _data = value   
    ''    End Set   
    ''End Property   
End Class  
  
'链表类   
Public Class XList   
    Dim firstNode As XListItem     '头结点   
    Dim lastNode As XListItem       '尾结点   
    Dim curNode As XListItem        '当前节点,类似游标   
    Public Sub New()   
        firstNode = InlineAssignHelper(lastNode, InlineAssignHelper(curNode, Nothing))   
    End Sub  
  
    '**********************************************************************************************   
    '判断链表是否为空   
    '**********************************************************************************************   
    Public Function IsEmpty() As Boolean  
        'Return firstNode Is Nothing   
        '如果头结点为空,即空链表   
        If firstNode Is Nothing Then  
            Return True  
            '如果不为空   
        Else  
            Return False  
        End If  
    End Function  
  
    '**********************************************************************************************   
    '清空链表   
    '**********************************************************************************************   
    Public Sub ClearLinklist()   
        firstNode = Nothing  
        lastNode = Nothing  
        curNode = Nothing  
    End Sub  
  
    '**********************************************************************************************   
    '插入结点   
    '**********************************************************************************************   
    Public Sub Insert(ByVal strInsert As String)   
        '如果链表为空链表,插入第一个结点时   
        If IsEmpty() Then  
            lastNode = New XListItem(strInsert)   
            lastNode.[next] = Nothing  
            firstNode = lastNode   
            Return  
        End If  
  
        '不为空链表   
        curNode = New XListItem(strInsert)   
        curNode.[next] = Nothing  
  
        lastNode.[next] = curNode   
        lastNode = curNode   
    End Sub  
  
    '**********************************************************************************************   
    '复杂插入   
    '引数:strInsert 插入的结点值;iLocator 要插入的结点的位置   
    '返回值:无   
    '**********************************************************************************************   
    Public Sub Insert(ByVal strInsert As String, ByVal iLocator As Integer)   
        '如果链表为空链表,   
        If IsEmpty() Then  
            lastNode = New XListItem(strInsert)   
            lastNode.[next] = Nothing  
            firstNode = lastNode   
            Return  
        End If  
  
        '不为空链表   
        Dim newNode As New XListItem(strInsert)   
        newNode.[next] = Nothing  
  
        If firstNode.[next] Is Nothing Then  
            firstNode.[next] = newNode   
            lastNode = newNode   
            Return  
        End If  
  
        Dim objNode As XListItem = GetNode(iLocator)   
        If objNode Is Nothing Then  
            Insert(strInsert)   
            Return  
        End If  
  
        Dim tempNode As XListItem = objNode   
        Dim prevNode As XListItem = GetNode(iLocator - 1)   
        If prevNode Is lastNode Then  
            Insert(strInsert)   
            Return  
        End If  
  
        If objNode Is firstNode Then  
            newNode.[next] = firstNode   
            firstNode = newNode   
            Return  
        End If  
  
        objNode = Nothing  
        objNode = newNode   
        objNode.[next] = tempNode   
        prevNode.[next] = objNode   
  
    End Sub  
  
    '**********************************************************************************************   
    '获取结点个数   
    '引数:iNode   
    '返回值:XListItem 返回结点   
    '**********************************************************************************************   
    Public Function GetNode(ByVal iNode As Integer) As XListItem   
        If iNode < 0 Then  
            iNode = 0   
        End If  
  
        If IsEmpty() Then  
            Return Nothing  
        End If  
  
        If 0 = iNode Then  
            Return firstNode   
        End If  
  
        Dim currentNode As XListItem = firstNode   
        For i As Integer = 0 To iNode - 1   
            If currentNode Is lastNode Then  
                Return lastNode   
            End If  
            currentNode = currentNode.[next]   
        Next  
        Return currentNode   
    End Function  
  
    '**********************************************************************************************   
    '显示链表   
    '引数:无   
    '返回值:无   
    '**********************************************************************************************   
    Public Sub Print()   
        If IsEmpty() Then  
            Console.WriteLine("List is Empty")   
            Return  
        End If  
  
        Console.Write("The List is: ")   
  
        Dim current As XListItem = firstNode   
  
        'output current node data while not at end of list   
        While current IsNot Nothing  
            Console.Write(current.data & "  ")   
            current = current.[next]   
        End While  
  
        Console.WriteLine(vbLf)   
    End Sub  
  
    ''**********************************************************************************************   
    ''显示链表   
    ''引数:无   
    ''返回值:无   
    ''**********************************************************************************************   
    Public Function PrintLinkList() As String  
        Dim strResult As String = ""  
  
        If IsEmpty() Then  
            strResult = "链表为空"  
            Return strResult   
        End If  
  
        Dim current As XListItem = firstNode   
  
        '不是尾结点 继续输出   
        While Not current Is Nothing  
            'Console.Write(current.data & "  ")   
            strResult &= current.data & ","  
            current = current.[next]   
        End While  
  
        '去掉末尾的,   
        strResult = strResult.Substring(0, strResult.Length - 1)   
  
        Return strResult   
  
    End Function  
  
    '**********************************************************************************************   
    '移除的链表的结点   
    '引数:strInsert 要移除的链表的结点值   
    '返回值:true or false  是否移除成功   成功true 失败 false   
    '**********************************************************************************************   
    Public Function Remove(ByVal strInsert As String) As Boolean  
        If IsEmpty() Then  
            Return False  
        End If  
  
        If firstNode.data = strInsert Then  
            firstNode = firstNode.[next]   
            Return True  
        End If  
  
        Dim curNodeF As XListItem = firstNode   
        curNode = curNodeF   
  
        If curNode Is Nothing Then  
            Return False  
        End If  
  
        While True  
            curNode = curNode.[next]   
            If curNode Is lastNode Then  
                If curNode.data = strInsert Then  
                    curNode = Nothing  
                    lastNode = curNodeF   
                    lastNode.[next] = Nothing  
                    Return True  
                End If  
                Return False  
            End If  
  
            If curNode.data = strInsert Then  
  
                curNodeF.[next] = curNode.[next]   
                curNode = Nothing  
                Return True  
            End If  
            curNodeF = curNodeF.[next]   
        End While  
    End Function  
  
    '**********************************************************************************************   
    '逆序显示链表   
    '引数:t 链表   
    '返回值:newList 逆序链表   
    '**********************************************************************************************   
    Public Function Revert(ByVal t As XListItem) As XListItem   
        Dim newList As XListItem = Nothing  
        While t IsNot Nothing  
            Dim temp As New XListItem()   
            temp.data = t.data   
            temp.[next] = newList   
  
            newList = temp   
            t = t.[next]   
        End While  
        Return newList   
    End Function  
  
    '**********************************************************************************************   
    '逆序显示链表   
    '引数:t 链表   
    '返回值:newList 逆序链表   
    '**********************************************************************************************   
    Public Function Revert() As XListItem   
        Dim newList As XListItem = Nothing  
        While firstNode IsNot Nothing  
            Dim temp As New XListItem()   
            temp.data = firstNode.data   
            temp.[next] = newList   
  
            newList = temp   
            firstNode = firstNode.[next]   
        End While  
  
        firstNode = newList   
        Return newList   
    End Function  
  
    Private Shared Function InlineAssignHelper(Of T)(ByRef target As T, ByVal value As T) As T   
        target = value   
        Return value   
    End Function  
  
End Class  
  
'class EmptyListException definition   
Public Class EmptyListException   
    Inherits applicationException   
    Public Sub New(ByVal name As String)   
        MyBase.New("The " & name & "is empty")   
    End Sub  
End Class  
'end class EmptyListException  
'
' * Created by SharpDevelop.
' * User: fx
' * Date: 2009/11/08
' * Time: 2009年11月8日14:15:43

'

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text

'结点类
Public Class XListItem
    Public Sub New()
        data = ""
        [next] = Nothing
    End Sub
    Public Sub New(ByVal str As String)
        data = str
        [next] = Nothing
    End Sub

    Public [next] As XListItem          '类似于指针域
    Public data As String               '数值域

    '也可以用如下的属性来表示data,
    ''Private _data As String

    ''Public Property Data() As String
    ''    Get
    ''        Return _data
    ''    End Get
    ''    Set(ByVal value As String)
    ''        _data = value
    ''    End Set
    ''End Property
End Class

'链表类
Public Class XList
    Dim firstNode As XListItem     '头结点
    Dim lastNode As XListItem       '尾结点
    Dim curNode As XListItem        '当前节点,类似游标
    Public Sub New()
        firstNode = InlineAssignHelper(lastNode, InlineAssignHelper(curNode, Nothing))
    End Sub

    '**********************************************************************************************
    '判断链表是否为空
    '**********************************************************************************************
    Public Function IsEmpty() As Boolean
        'Return firstNode Is Nothing
        '如果头结点为空,即空链表
        If firstNode Is Nothing Then
            Return True
            '如果不为空
        Else
            Return False
        End If
    End Function

    '**********************************************************************************************
    '清空链表
    '**********************************************************************************************
    Public Sub ClearLinklist()
        firstNode = Nothing
        lastNode = Nothing
        curNode = Nothing
    End Sub

    '**********************************************************************************************
    '插入结点
    '**********************************************************************************************
    Public Sub Insert(ByVal strInsert As String)
        '如果链表为空链表,插入第一个结点时
        If IsEmpty() Then
            lastNode = New XListItem(strInsert)
            lastNode.[next] = Nothing
            firstNode = lastNode
            Return
        End If

        '不为空链表
        curNode = New XListItem(strInsert)
        curNode.[next] = Nothing

        lastNode.[next] = curNode
        lastNode = curNode
    End Sub

    '**********************************************************************************************
    '复杂插入
    '引数:strInsert 插入的结点值;iLocator 要插入的结点的位置
    '返回值:无
    '**********************************************************************************************
    Public Sub Insert(ByVal strInsert As String, ByVal iLocator As Integer)
        '如果链表为空链表,
        If IsEmpty() Then
            lastNode = New XListItem(strInsert)
            lastNode.[next] = Nothing
            firstNode = lastNode
            Return
        End If

        '不为空链表
        Dim newNode As New XListItem(strInsert)
        newNode.[next] = Nothing

        If firstNode.[next] Is Nothing Then
            firstNode.[next] = newNode
            lastNode = newNode
            Return
        End If

        Dim objNode As XListItem = GetNode(iLocator)
        If objNode Is Nothing Then
            Insert(strInsert)
            Return
        End If

        Dim tempNode As XListItem = objNode
        Dim prevNode As XListItem = GetNode(iLocator - 1)
        If prevNode Is lastNode Then
            Insert(strInsert)
            Return
        End If

        If objNode Is firstNode Then
            newNode.[next] = firstNode
            firstNode = newNode
            Return
        End If

        objNode = Nothing
        objNode = newNode
        objNode.[next] = tempNode
        prevNode.[next] = objNode

    End Sub

    '**********************************************************************************************
    '获取结点个数
    '引数:iNode
    '返回值:XListItem 返回结点
    '**********************************************************************************************
    Public Function GetNode(ByVal iNode As Integer) As XListItem
        If iNode < 0 Then
            iNode = 0
        End If

        If IsEmpty() Then
            Return Nothing
        End If

        If 0 = iNode Then
            Return firstNode
        End If

        Dim currentNode As XListItem = firstNode
        For i As Integer = 0 To iNode - 1
            If currentNode Is lastNode Then
                Return lastNode
            End If
            currentNode = currentNode.[next]
        Next
        Return currentNode
    End Function

    '**********************************************************************************************
    '显示链表
    '引数:无
    '返回值:无
    '**********************************************************************************************
    Public Sub Print()
        If IsEmpty() Then
            Console.WriteLine("List is Empty")
            Return
        End If

        Console.Write("The List is: ")

        Dim current As XListItem = firstNode

        'output current node data while not at end of list
        While current IsNot Nothing
            Console.Write(current.data & "  ")
            current = current.[next]
        End While

        Console.WriteLine(vbLf)
    End Sub

    ''**********************************************************************************************
    ''显示链表
    ''引数:无
    ''返回值:无
    ''**********************************************************************************************
    Public Function PrintLinkList() As String
        Dim strResult As String = ""

        If IsEmpty() Then
            strResult = "链表为空"
            Return strResult
        End If

        Dim current As XListItem = firstNode

        '不是尾结点 继续输出
        While Not current Is Nothing
            'Console.Write(current.data & "  ")
            strResult &= current.data & ","
            current = current.[next]
        End While

        '去掉末尾的,
        strResult = strResult.Substring(0, strResult.Length - 1)

        Return strResult

    End Function

    '**********************************************************************************************
    '移除的链表的结点
    '引数:strInsert 要移除的链表的结点值
    '返回值:true or false  是否移除成功   成功true 失败 false
    '**********************************************************************************************
    Public Function Remove(ByVal strInsert As String) As Boolean
        If IsEmpty() Then
            Return False
        End If

        If firstNode.data = strInsert Then
            firstNode = firstNode.[next]
            Return True
        End If

        Dim curNodeF As XListItem = firstNode
        curNode = curNodeF

        If curNode Is Nothing Then
            Return False
        End If

        While True
            curNode = curNode.[next]
            If curNode Is lastNode Then
                If curNode.data = strInsert Then
                    curNode = Nothing
                    lastNode = curNodeF
                    lastNode.[next] = Nothing
                    Return True
                End If
                Return False
            End If

            If curNode.data = strInsert Then

                curNodeF.[next] = curNode.[next]
                curNode = Nothing
                Return True
            End If
            curNodeF = curNodeF.[next]
        End While
    End Function

    '**********************************************************************************************
    '逆序显示链表
    '引数:t 链表
    '返回值:newList 逆序链表
    '**********************************************************************************************
    Public Function Revert(ByVal t As XListItem) As XListItem
        Dim newList As XListItem = Nothing
        While t IsNot Nothing
            Dim temp As New XListItem()
            temp.data = t.data
            temp.[next] = newList

            newList = temp
            t = t.[next]
        End While
        Return newList
    End Function

    '**********************************************************************************************
    '逆序显示链表
    '引数:t 链表
    '返回值:newList 逆序链表
    '**********************************************************************************************
    Public Function Revert() As XListItem
        Dim newList As XListItem = Nothing
        While firstNode IsNot Nothing
            Dim temp As New XListItem()
            temp.data = firstNode.data
            temp.[next] = newList

            newList = temp
            firstNode = firstNode.[next]
        End While

        firstNode = newList
        Return newList
    End Function

    Private Shared Function InlineAssignHelper(Of T)(ByRef target As T, ByVal value As T) As T
        target = value
        Return value
    End Function

End Class

'class EmptyListException definition
Public Class EmptyListException
    Inherits ApplicationException
    Public Sub New(ByVal name As String)
        MyBase.New("The " & name & "is empty")
    End Sub
End Class
'end class EmptyListException


Form1.vb

删除结点自己添加下吧

view plaincopy to clipboardprint?
Public Class Form1   
  
    Dim fxXlist As New XList   
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load   
        '默认值第一个,显示链表   
        Me.combFxOptions.SelectedIndex = 0   
    End Sub  
  
    Private Sub btnDo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDo.Click   
        Select Case Me.combFxOptions.SelectedIndex   
            '显示链表   
            '在链表头部插入结点   
            '在链表尾部插入结点   
            '在链表中插入结点(包括头尾)   
            '链表逆序显示s   
  
            '显示链表   
            Case 0   
                If Not fxXlist Is Nothing Then  
                    Me.txtFxCurLinklist.Text = fxXlist.PrintLinkList()   
                Else  
                    Me.txtFxCurLinklist.Text = "空链表"  
                End If  
                '在链表头部插入结点   
            Case 1   
                If Me.txtFxInsertValue.Text.Trim = String.Empty Then  
                    MessageBox.Show("要插入的结点不能为空!", "错误", _   
                                    MessageBoxButtons.OK, MessageBoxIcon.Warning)   
                    Me.txtFxInsertValue.Focus()   
                Else  
  
                    fxXlist.Insert(Me.txtFxInsertValue.Text.Trim, 0)   
                    MsgBox("插入成功!", MsgBoxStyle.Information, "提示")   
                    Me.txtFxCurLinklist.Text = fxXlist.PrintLinkList()   
                    Me.txtFxInsertValue.SelectAll()   
                    Me.txtFxInsertValue.Focus()   
                End If  
  
                '在链表尾部插入结点   
            Case 2   
                If Me.txtFxInsertValue.Text.Trim = String.Empty Then  
                    MessageBox.Show("要插入的结点不能为空!", "错误", _   
                                    MessageBoxButtons.OK, MessageBoxIcon.Warning)   
                    Me.txtFxInsertValue.Focus()   
                Else  
  
                    fxXlist.Insert(Me.txtFxInsertValue.Text.Trim)   
                    MsgBox("插入成功!", MsgBoxStyle.Information, "提示")   
                    Me.txtFxCurLinklist.Text = fxXlist.PrintLinkList()   
                    Me.txtFxInsertValue.SelectAll()   
                    Me.txtFxInsertValue.Focus()   
                End If  
  
                '在链表中插入结点(包括头尾)   
            Case 3   
                If Me.txtFxInsertValue.Text.Trim = String.Empty Then  
                    MessageBox.Show("要插入的结点不能为空!", "错误", _   
                                    MessageBoxButtons.OK, MessageBoxIcon.Warning)   
                    Me.txtFxInsertValue.Focus()   
                ElseIf Me.txtFxLocation.Text.Trim = String.Empty Then  
                    MessageBox.Show("要插入的位置不能为空!", "错误", _   
                                   MessageBoxButtons.OK, MessageBoxIcon.Warning)   
                    Me.txtFxLocation.Focus()   
                ElseIf IsNumeric(Me.txtFxLocation.Text) = False Then  
                    MessageBox.Show("要插入的位置必须为数字!", "错误", _   
                                  MessageBoxButtons.OK, MessageBoxIcon.Warning)   
                    Me.txtFxLocation.Focus()   
                Else  
  
                    fxXlist.Insert(Me.txtFxInsertValue.Text.Trim, Me.txtFxLocation.Text.Trim)   
                    MsgBox("插入成功!", MsgBoxStyle.Information, "提示")   
                    Me.txtFxCurLinklist.Text = fxXlist.PrintLinkList()   
                    Me.txtFxInsertValue.SelectAll()   
                    Me.txtFxInsertValue.Focus()   
                End If  
  
                '链表逆序显示   
            Case 4   
                fxXlist.Revert()   
                Me.txtFxCurLinklist.Text = fxXlist.PrintLinkList()   
  
            Case 5   
  
            Case 6   
  
            Case Else  
        End Select  
    End Sub  
  
    Private Sub btnClearLinklist_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClearLinklist.Click   
        Me.fxXlist.ClearLinklist()   
        Me.txtFxCurLinklist.Text = "空链表"  
  
        Me.txtFxInsertValue.Text = ""  
        Me.txtFxLocation.Text = ""  
        Me.combFxOptions.SelectedIndex = 0   
    End Sub  
End Class  
页面不存在!






您访问的页面无法找到

3 秒后将自动跳转到导航页

请检查您输入的地址是否正确

页面不存在!






您访问的页面无法找到

3 秒后将自动跳转到导航页

请检查您输入的地址是否正确

页面不存在!






您访问的页面无法找到

3 秒后将自动跳转到导航页

请检查您输入的地址是否正确

页面不存在!






您访问的页面无法找到

3 秒后将自动跳转到导航页

请检查您输入的地址是否正确