<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    C#實現鏈表

    Posted on 2007-03-29 17:02 dennis 閱讀(1996) 評論(1)  編輯  收藏 所屬分類: C#歷程數據結構與算法
    ??? 今天受一個帖子的刺激,再次復習起了數據結構與算法,那本《數據結構與算法(java版)》我還剩圖和高級排序的幾章沒看,工作上也沒我的事需要處理,就用C#重新寫了一遍鏈表結構,權作復習。

    定義List接口:
    ???public??interface?List
    ????{
    ????????
    bool?IsEmpty();
    ????????
    void?Unshift(Object?obj);
    ????????Object?Shift();
    ????????
    void?Push(Object?obj);
    ????????Object?Pop();
    ????????
    bool?Contain(Object?obj);
    ????????
    void?Delete(Object?obj);
    ????????
    void?PrintAll();
    ????????Object?getHead();
    ????????Object?getTail();
    ??????? void Clear();
    ????}

    實現單向鏈表:
    ?//單向鏈表
    ????public?class?SList:List
    ????{
    ????????
    private?SNode?head,?tail;

    ????????
    public?SList()
    ????????{
    ????????????
    this.head?=?this.tail?=?null;
    ????????}
    ????????
    public?bool?IsEmpty()
    ????????{
    ????????????
    return?head?==?null;
    ????????}
    ????????
    public?void?Unshift(Object?obj)
    ????????{

    ????????????head?
    =?new?SNode(obj,?head);
    ????????????
    if?(tail?==?null)
    ????????????????tail?
    =?head;
    ????????}
    ????????
    public?Object?Shift()
    ????????{
    ????????????
    if?(head?==?null)
    ????????????????
    throw?new?NullReferenceException();
    ????????????Object?value?
    =?head.value;
    ????????????
    if?(head?==?tail)
    ????????????????head?
    =?tail?=?null;
    ????????????
    else
    ????????????????head?
    =?head.next;
    ????????????
    return?value;
    ????????}

    ????????
    public?void?Push(Object?obj)
    ????????{
    ????????????
    if?(!IsEmpty())
    ????????????{
    ????????????????tail.next?
    =?new?SNode(obj);
    ????????????????tail?
    =?tail.next;
    ????????????}
    ????????????
    else
    ????????????????head?
    =?tail?=?new?SNode(obj);

    ????????}

    ????????
    public?Object?Pop()
    ????????{
    ????????????
    if?(head?==?null)
    ????????????????
    throw?new?NullReferenceException();
    ????????????Object?obj?
    =?tail.value;
    ????????????
    if?(head?==?tail)
    ????????????????head?
    =?tail?=?null;
    ????????????
    else
    ????????????{
    ????????????????
    //查找前驅節點
    ????????????????for?(SNode?temp?=?head;?temp.next?!=?null?&&?!temp.next.Equals(tail);?temp?=?temp.next)
    ????????????????????tail?
    =?temp;
    ????????????????tail.next?
    =?null;
    ????????????}
    ????????????
    return?obj;
    ????????}
    ????????
    public?void?PrintAll()
    ????????{
    ????????????
    string?result?=?"";
    ????????????
    for?(SNode?temp?=?head;?temp?!=?null;?temp?=?temp.next)
    ????????????????result?
    +=?"?"?+?temp.value.ToString();
    ????????????Console.WriteLine(result);
    ????????}

    ????????
    public?bool?Contain(Object?obj)
    ????????{
    ????????????
    if?(head?==?null)
    ????????????????
    return?false;
    ????????????
    else
    ????????????{
    ????????????????
    for?(SNode?temp?=?head;?temp?!=?null;?temp?=?temp.next)
    ????????????????{
    ????????????????????
    if?(temp.value.Equals(obj))
    ????????????????????????
    return?true;
    ????????????????}
    ????????????}
    ????????????
    return?false;
    ????????}

    ????????
    public?void?Delete(Object?obj)
    ????????{
    ????????????
    if?(!IsEmpty())
    ????????????{
    ????????????????
    if?(head?==?tail?&&?head.value.Equals(obj))
    ????????????????????head?
    =?tail?=?null;
    ????????????????
    else?if?(head.value.Equals(obj))
    ????????????????????head?
    =?head.next;
    ????????????????
    else
    ????????????????{
    ????????????????????
    //temp_prev為刪除值的前驅節點
    ????????????????????for?(SNode?temp_prev?=?head,?temp?=?head.next;?temp?!=?null;?temp_prev?=?temp_prev.next,?temp?=?temp.next)
    ????????????????????{
    ????????????????????????
    if?(temp.value.Equals(obj))
    ????????????????????????{
    ????????????????????????????temp_prev.next?
    =?temp.next;??//設置前驅節點的next為下個節點?
    ????????????????????????????if?(temp?==?tail)
    ???????????????????????????????tail?
    =?temp_prev;
    ????????????????????????????temp?
    =?null;
    ????????????????????????????
    break;
    ????????????????????????}
    ????????????????????}
    ????????????????}
    ????????????}
    ????????}
    ????????
    public??Object?getHead()
    ????????{
    ????????????
    return?this.head.value;
    ????????}
    ????????
    public?Object?getTail()
    ????????{
    ????????????
    return?this.tail.value;
    ????????}
    ? ? ? ? public void Clear()
    ??????? {

    ??????????? do
    ??????????? {
    ??????????????? Delete(head.value);
    ??????????? } while (!IsEmpty());
    ??????? }

    ????}

    ????
    class?SNode
    ????{
    ????????
    public?Object?value;
    ????????
    public?SNode?next;
    ????????
    public?SNode(Object?value,?SNode?next)
    ????????{
    ????????????
    this.value?=?value;
    ????????????
    this.next?=?next;
    ????????}
    ????????
    public?SNode(Object?value)
    ????????{
    ????????????
    this.value?=?value;
    ????????????
    this.next?=?null;
    ????????}
    ????}

    實現雙向鏈表:
    ?//雙向鏈表
    ????public?class?LinkedList:List
    ????{
    ????????
    private?LinkedNode?head,?tail;

    ????????
    public?LinkedList()
    ????????{
    ????????????head?
    =?tail?=?null;
    ????????}
    ????????
    public?bool?IsEmpty()
    ????????{
    ????????????
    return?head?==?null;
    ????????}

    ????????
    public?void?Unshift(Object?obj)
    ????????{
    ????????????
    if?(IsEmpty())
    ????????????????head?
    =?tail?=?new?LinkedNode(obj);
    ????????????
    else
    ????????????{
    ????????????????head?
    =?new?LinkedNode(obj,?null,?head);
    ????????????????head.next.prev?
    =?head;
    ????????????}

    ????????}
    ????????
    public?Object?Shift()
    ????????{
    ????????????
    if?(IsEmpty())
    ????????????????
    throw?new?NullReferenceException();
    ????????????Object?obj?
    =?head.value;
    ????????????
    if?(head?==?tail)
    ????????????????head?
    =?tail?=?null;
    ????????????
    else
    ????????????{
    ????????????????head?
    =?head.next;
    ????????????????head.prev?
    =?null;
    ????????????}
    ????????????
    return?obj;
    ????????}

    ????????
    public?void?Push(Object?obj)
    ????????{
    ????????????
    if?(IsEmpty())
    ????????????????head?
    =?tail?=?new?LinkedNode(obj);
    ????????????
    else
    ????????????{
    ????????????????tail?
    =?new?LinkedNode(obj,?tail,?null);
    ????????????????tail.prev.next?
    =?tail;
    ????????????}
    ????????}

    ????????
    public?Object?Pop()
    ????????{
    ????????????
    if?(IsEmpty())
    ????????????????
    throw?new?NullReferenceException();
    ????????????Object?value?
    =?tail.value;
    ????????????
    if?(head?==?tail)
    ????????????????head?
    =?tail?=?null;
    ????????????
    else
    ????????????{
    ????????????????tail?
    =?tail.prev;
    ????????????????tail.next?
    =?null;
    ????????????}
    ????????????
    return?value;
    ????????}
    ????????
    public?bool?Contain(Object?obj)
    ????????{
    ????????????
    if?(IsEmpty())
    ????????????????
    return?false;
    ????????????
    else
    ????????????{
    ????????????????
    for?(LinkedNode?temp?=?head;?temp?!=?null;?temp?=?temp.next)
    ????????????????????
    if?(temp.value.Equals(obj))
    ????????????????????????
    return?true;
    ????????????}
    ????????????
    return?false;
    ????????}

    ????????
    public?void?Delete(Object?obj)
    ????????{
    ????????????
    if?(IsEmpty())
    ????????????????
    throw?new?NullReferenceException();
    ????????????
    if?(head?==?tail)
    ????????????????head?
    =?tail?=?null;
    ????????????
    else
    ????????????{
    ????????????????
    for?(LinkedNode?temp?=?head;?temp?!=?null;?temp?=?temp.next)
    ????????????????{
    ????????????????????
    if?(temp.value.Equals(obj))
    ????????????????????{
    ????????????????????????
    if?(temp.value.Equals(obj))
    ????????????????????????{
    ????????????????????????????
    if?(temp?==?tail)
    ????????????????????????????{
    ????????????????????????????????tail?
    =?tail.prev;
    ????????????????????????????????tail.next?
    =?null;
    ????????????????????????????????
    break;
    ????????????????????????????}
    ????????????????????????????
    else?if?(temp?==?head)
    ????????????????????????????{
    ????????????????????????????????head.next.prev?
    =?null;
    ????????????????????????????????head?
    =?head.next;
    ????????????????????????????}

    ????????????????????????????
    else
    ????????????????????????????????temp.prev.next?
    =?temp.next;
    ????????????????????????}
    ????????????????????}
    ????????????????}

    ????????????}
    ????????}

    ????????
    public?void?PrintAll()
    ????????{
    ????????????
    string?result?=?"";
    ????????????
    for(LinkedNode?temp=head;temp!=null;temp=temp.next)
    ????????????????result?
    +=?"?"?+?temp.value.ToString();
    ????????????Console.WriteLine(result);
    ????????}
    ????????
    public?Object?getHead()
    ????????{
    ????????????
    return?this.head.value;
    ????????}
    ????????
    public?Object?getTail()
    ????????{
    ????????????
    return?this.tail.value;
    ????????}
    ? ? ? ? public void Clear()
    ??????? {
    ??????????? do
    ??????????? {
    ??????????????? Delete(head.value);
    ??????????? } while (!IsEmpty());

    ??????? }
    ??? }
    ????
    class?LinkedNode
    ????{
    ????????
    public?Object?value;
    ????????
    public?LinkedNode?prev;
    ????????
    public?LinkedNode?next;

    ????????
    public?LinkedNode(Object?value,?LinkedNode?prev,?LinkedNode?next)
    ????????{
    ????????????
    this.value?=?value;
    ????????????
    this.next?=?next;
    ????????????
    this.prev?=?prev;
    ????????}
    ????????
    public?LinkedNode(Object?value)
    ????????{
    ????????????
    this.value?=?value;
    ????????}
    ????}


    評論

    # re: C#實現鏈表  回復  更多評論   

    2011-09-24 14:15 by tbw
    可以不錯
    主站蜘蛛池模板: 国产一级黄片儿免费看| 亚洲成A人片在线观看无码不卡| 久久一本岛在免费线观看2020| 香蕉视频在线观看免费| 亚洲成a人片在线观看精品| 亚洲高清在线播放| 亚洲伊人久久综合影院| 国产女高清在线看免费观看| 一二三四影视在线看片免费| 久久免费观看国产99精品| 久久精品无码专区免费| 理论秋霞在线看免费| 亚洲av午夜国产精品无码中文字| 亚洲欧洲国产成人精品| 久久亚洲AV无码精品色午夜麻豆| 亚洲午夜久久久久妓女影院 | 亚洲欧洲日产国码高潮αv| 日韩成人免费在线| 亚洲免费综合色在线视频| 日本免费一区二区在线观看| 中文无码成人免费视频在线观看| caoporn成人免费公开| 九九久久精品国产免费看小说| 亚洲AV成人精品一区二区三区| 亚洲日本国产综合高清| 亚洲AV无码一区二区三区在线| 中文字幕亚洲精品| 亚洲综合网美国十次| 亚洲精品视频免费在线观看| 精品亚洲成a人片在线观看| 77777_亚洲午夜久久多人| 亚洲综合激情另类小说区| 久久亚洲国产精品成人AV秋霞| 亚洲精品高清国产麻豆专区| 久久久久亚洲AV无码专区体验| 亚洲国产精品第一区二区| 2022年亚洲午夜一区二区福利 | 一边摸一边桶一边脱免费视频| 成年网站免费入口在线观看| 五月天婷婷精品免费视频| 久久久久久毛片免费看|