C#資料結構篇(一連結串列類) (轉)
資料結構篇(一)線性表
作者: 寒羽狼 (Dark_Slaer_Tang)
最近,馬子跑了,你說女人老是容易翻臉。。。,看來做員必定要 “煢煢孑立,行影相吊”悲慘命運了。還是老老實實吧,我發現用c# 編一些資料接結構的類也瞞不錯的,於是想把資料結構的演算法,用C#重寫一遍,打發無聊的時光,下面是資料結構中的連結串列的實現。
首先定義結點型別,定義了,前一個指標域,後一個指標域,如下:
using System;
namespace List
{
///
/// Summary description for ListNode.
///
// 結點類
public class ListNode
{
public ListNode(int NewValue)
{
Value=NewValue;
}
///
/// 前一個
///
public ListNode Previous;
///
/// 後一個
///
public ListNode Next;
///
/// 值
///
public int Value;
}
}
using System;
namespace List
{
///
/// 連結串列類
///
定義結點之後,開始類線性表的操作程式設計了.在LIST 類中,採用了,Head ,Tail, Current,三個指標,使用Append ,MoveFrist,MovePrevious,MoveNext,MoveLast ,Delete,InsertAscending,InsertUnAscending ,Clear 實現移動,新增,刪除,升序插入,降序插入,清空連結串列操作,GetCurrentValue() 方法取得當前的值。
public class Clist
{
public Clist()
{
//構造
//初始化
ListCountValue=0;
Head=null;
Tail=null;
}
///
/// 頭指標
///
private ListNode Head;
///
/// 尾指標
///
private ListNode Tail;
///
/// 當前指標
///
private ListNode Current;
///
/// 連結串列資料的個數
///
private int ListCountValue;
///
/// 尾部新增資料
///
public void Append(int DataValue )
{
ListNode NewNode=new ListNode( DataValue);
if (IsNull())
//如果頭指標為空
{
Head=NewNode;
Tail=NewNode;
}
else
{
Tail.Next =NewNode;
NewNode.Previous =Tail;
Tail=NewNode;
}
Current=NewNode;
//連結串列資料個數加一
ListCountValue+=1;
}
///
/// 刪除當前的資料
///
public void Delete()
{
//若為空連結串列
if ( ! IsNull())
{
//若刪除頭
if (IsBof())
{
Head=Current.Next ;
Current=Head;
ListCountValue-=1;
return;
}
//若刪除尾
if (IsEof())
{
Tail=Current.Previous ;
Current=Tail;
ListCountValue-=1;
return;
}
//若刪除中間資料
Current.Previous.Next =Current.Next ;
Current=Current.Previous ;
ListCountValue-=1;
return;
}
}
///
/// 向後移動一個資料
///
public void MoveNext()
{
if (! IsEof()) Current=Current.Next ;
}
///
/// 向前移動一個資料
///
public void MovePrevious()
{
if (!IsBof()) Current=Current.Previous ;
}
///
/// 移動到第一個資料
///
public void MoveFrist()
{
Current=Head;
}
///
/// 移動到最後一個資料
///
public void MoveLast()
{
Current=Tail;
}
///
/// 判斷是否為空連結串列
///
public bool IsNull()
{
if (ListCountValue==0)
return true;
return false;
}
///
/// 判斷是否為到達尾部
///
public bool IsEof()
{
if( Current ==Tail )
return true;
return false;
}
///
/// 判斷是否為到達頭部
///
public bool IsBof()
{
if( Current ==Head)
return true;
return false;
}
public int GetCurrentValue()
{
return Current.Value ;
}
///
/// 取得連結串列的資料個數
///
public int ListCount
{
get
{
return ListCountValue;
}
}
///
/// 清空連結串列
///
public void Clear()
{
MoveFrist();
while (!IsNull())
{
//若不為空連結串列,從尾部刪除
Delete();
}
}
///
/// 在當前位置前插入資料
///
public void Insert(int DataValue)
{
ListNode NewNode=new ListNode (DataValue);
if(IsNull())
{
//為空表,則新增
Append(DataValue);
return;
}
if (IsBof())
{
//為頭部插入
NewNode.Next =Head;
Head.Previous =NewNode;
Head=NewNode;
Current=Head;
ListCountValue+=1;
return;
}
//中間插入
NewNode.Next =Current;
NewNode.Previous =Current.Previous ;
Current.Previous.Next =NewNode;
Current.Previous =NewNode;
Current=NewNode;
ListCountValue+=1;
}
///
/// 進行升序插入
///
public void InsertAscending(int InsertValue)
{
//引數:InsertValue 插入的資料
//為空連結串列
if (IsNull())
{
//新增
Append(InsertValue);
return;
}
//移動到頭
MoveFrist();
if ((InsertValue
//滿足條件,則插入,退出
Insert(InsertValue);
return;
}
while(true)
{
if (InsertValue
//滿族條件,則插入,退出
Insert(InsertValue);
break;
}
if (IsEof())
{
//尾部新增
Append(InsertValue);
break;
}
//移動到下一個指標
MoveNext();
}
}
///
/// 進行降序插入
///
public void InsertUnAscending(int InsertValue)
{
//引數:InsertValue 插入的資料
//為空連結串列
if (IsNull())
{
//新增
Append(InsertValue);
return;
}
//移動到頭
MoveFrist();
if (InsertValue>GetCurrentValue())
{
//滿足條件,則插入,退出
Insert(InsertValue);
return;
}
while(true)
{
if (InsertValue>GetCurrentValue())
{
//滿族條件,則插入,退出
Insert(InsertValue);
break;
}
if (IsEof())
{
//尾部新增
Append(InsertValue);
break;
}
//移動到下一個指標
MoveNext();
}
}
}
}
好了,一個簡單的連結串列類實現了,當然還有許多的功能,可以根據自己的需要新增就好了。TO BE CONTINUE 。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992422/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C#資料結構-靜態連結串列C#資料結構
- 資料結構之連結串列篇(單連結串列的常見操作)資料結構
- 資料結構-連結串列資料結構
- 資料結構 - 連結串列資料結構
- 連結串列-資料結構資料結構
- 資料結構--連結串列資料結構
- 資料結構—連結串列資料結構
- 資料結構之連結串列:206. 反轉連結串列資料結構
- 資料結構-單連結串列、雙連結串列資料結構
- 資料結構實驗之連結串列一:順序建立連結串列資料結構
- JavaScript資料結構--連結串列JavaScript資料結構
- 資料結構之「連結串列」資料結構
- 資料結構之連結串列資料結構
- JS版資料結構第三篇(連結串列)JS資料結構
- 畫江湖之資料結構【第一話:連結串列】單向連結串列資料結構
- 畫江湖之資料結構【第一話:連結串列】雙向連結串列資料結構
- 畫江湖之資料結構 [第一話:連結串列] 單向連結串列資料結構
- 畫江湖之資料結構 [第一話:連結串列] 雙向連結串列資料結構
- Java版-資料結構-連結串列Java資料結構
- JavaScript資料結構 之 連結串列JavaScript資料結構
- 資料結構學習--連結串列資料結構
- 資料結構:跳躍連結串列資料結構
- js資料結構--連結串列(likedList)JS資料結構
- 資料結構基礎 連結串列資料結構
- 資料結構之連結串列【上】資料結構
- 資料結構之連結串列操作資料結構
- 資料結構——雙向連結串列資料結構
- 資料結構04——單連結串列資料結構
- JAVA資料結構之連結串列Java資料結構
- 資料結構之單連結串列資料結構
- 資料結構:雙向連結串列資料結構
- JS資料結構(四)——連結串列JS資料結構
- 前端資料結構--線性結構-連結串列前端資料結構
- JavaScript 的資料結構和演算法 - 連結串列篇JavaScript資料結構演算法
- 一個統一的連結串列結構 (轉)
- 資料結構實驗之連結串列九:雙向連結串列資料結構
- 資料結構實驗之連結串列二:逆序建立連結串列資料結構
- 資料結構--陣列、單向連結串列、雙向連結串列資料結構陣列