欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《单向链结串列》PPT课件.ppt

    • 资源ID:5475423       资源大小:259.50KB        全文页数:38页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《单向链结串列》PPT课件.ppt

    單向鏈結串列,Singly Linked Lists,定義及表示法,節點包含資料(data)及鏈結(link)兩個欄位。其資料結構表示,如下圖所示head:指向串列前端之指標tail:指向串列尾端之指標,鏈結串列透過儲存元素在記憶體之位址為指標(Pointer)或鏈結(Link)取得下一個節點。故節點=資料+指標鏈結假設有一節點結構如下圖所示:,則其節點結構可定義如下:typedef struct node/*以結構體表示節點*/int data;/*data儲存節點資料項目*/struct node*next;NODE;/*next儲存下一個節點位址*/*NODE表新定義之節點結構資料型態*/一個指標變數head當作鏈結串列之起始指標,其宣告如下:NODE*head;/*head為一個指標,指向鏈結串列之起始節點*/,基本運作及圖解,單向鏈結串列的釋放,當使用malloc配置了記憶體之後,記憶體會一直存在直到程式結束,所以當不使用時必須釋放,釋放的方法為free(變數名稱);請務必記得釋放記憶體,雖然不會發生錯誤訊息,可是會一直在記憶體中,導致記憶體的浪費。,單向鏈結串列插入,如果打算在鏈結中加入一個新的節點,可以使用以下的方法,比方說有一個鏈結串列如下:,現在若想要加入一個11號的Mary節點,加在peter5節點和peter6節點之間,則先新增一個11號的Mary節點:,再把串列改成以下這樣就行了:5號Peter5節點的next指向11號節點。接著把11號的Mary節點的next指向6號的peter6節點就可以了。,為了要完成以上的方法,必須建立一些變數儲存資料,以這一個範例為例需要2個指標:指向Mary節點的指標New指向Peter5節點的指標Ptr,單向鏈結串列刪除,如果打算在鏈結中刪除節點,可以使用以下的方法:比方說有一個鏈結串列如下:,若要刪除5號Peter5節點,只需改了2個地方,4號Peter4節點的next指向6號的Peter6:,接著把5號Peter5節點釋放掉,使用Free:,單向鏈結串列的反轉,如果鏈結串列如下:,改成:,我們先使用1,2,3號節點的位置把1號節點的next設為Null再把2號的next指向1號節點接著使用2,3,4號節點再把3號的next指向2號節點接著使用3,4,5號節點再把4號的next指向3號節點,接著使用4,5,6號節點,.接著使用7,8,9號節點將8號節點的next指向7號節點發現9號節點next是NULL,跳出迴圈把9號節點的next指向8號把head(頭指標)指向9號節點即可,每一次迴圈次需要使用3個節點,把第2個節點的next指向第1個節點,下一次的第一個節點是這一次的第二個節點下一次的第二個節點是這一次的第三個節點下一次的第三個節點是這一次的第三個節點的next,基本運算的演算法與程式,產生新節點,C語言程式NODE*getnode(void)/*此函數產生一個新節點*/NODE*p;p=(NODE*)malloc(sizeof(NODE);/*malloc會動態地配置大小為sizeof 的記憶體*/*sizeof會傳回一個型態為NODE之值*/if(p=NULL)printf(“記憶體不足”);exit(1);return(p);,歸還一個節點,C語言程式void*freenode(NODE*p)/*此函數將節點還給記憶體*/free(p);,尋找一個節點,C語言程式NODE search_node(NODE*p,int num)/*自節點p之後尋找一個節點其data項目為 search_data之值*/NODE*q;q=p-next;/*q指向節點p之後第一個節點*/while(q!=NULL,鍵結串列的節點走訪,C語言程式NODE find_node(NODE*head,int num)NODE*ptr;ptr=head;/*指向串列起始*/while(ptr!=NULL)/*走訪串列*/if(ptr-num=num)/*找尋data*/return(ptr);ptr=ptr-next;/*指向下一節點*/return(ptr);,計算鏈結串列之長度,C語言程式int length(NODE*p)/*此函數計算節點p之後之長度*/int num=0;NODE*q=p-next;While(q!=NULL)num+;q=q-next;return(num);,節點之插入,由鏈結串列加入一個節點一個節點之插入有三種情況:節點加於第一個節點之前節點加於最後一個節點之後加於節點中間任何一個位置圖解,節點加於第一個節點之前,節點加於最後一個節點之後,加於節點中間任何一個位置,虛擬碼NODE*insert_node(NODE*head,NODE*ptr,int value)配置記憶體給new;if(ptr is NULL)插入第一個節點;else if(ptr-next=NULL)插入最後一個節點;else 插入成為中間節點;return(head);,C語言程式/*鍵結串列的節點插入*/NODE*insert_node(NODE*head,NODE*ptr,int value)NODE*new;/*新節點指標變數*/new=getnode();/*(1)建立新節點,取得一個可用節點*/new-num=value;/*(2)建立節點內容*/new-next=NULL;/*設定指標初值*/if(ptr=NULL)/*指標ptr是否是NULL*/,/第一種情況:插入第一個節點 new-next=head;/*新節點成為串列開始*/head=new;else if(ptr-next=NULL)/*是否是串列結束*/第二種情況:插入最後一個節點 ptr-next=new;/*最後指向新節點*/,else/第三種情況:插入成為中間節點/*(3)新節點指向下一節點*/new-next=ptr-next;/*(4)節點ptr指向新節點*/ptr-next=new;return(head);,刪除節點,由鏈結串列中刪除一個節點:一個節點之刪除有三種情況:刪除第一個節點刪除最後一個節點加於節點中間任何一個位置圖解:,刪除第一個節點,刪除最後一個節點,加於節點中間任何一個位置,虛擬碼NODE*delete_node(NODE*head,NODE*ptr)NODE*previous;/*指向前一節點*/if(ptr=head)/*是否是串列開始*/刪除第一個節點 else if(ptr-next=NULL)刪除最後一個節點 else刪除中間節點freenode(ptr);/*此函數將節點歸還給記憶體*/return(head);,C語言程式/鍵結串列的節點刪除NODE*delete_node(NODE*head,NODE*ptr)NODE*previous;/*指向前一節點*/if(ptr=head)/*是否是串列開始*/,/*第一種情況:刪除第一個節點*/head=head-next;return(head);/*reset 起始節點指標*/else previous=head;while(previous-next!=ptr)/*找節點ptr的前節點*/previous=previous-next;if(ptr-next=NULL)/*是否是串列結束*/,/第二種情況:刪除最後一個節點 previous-next=NULL;/*最後一個節點*/else/第三種情況:刪除中間節點 previous-next=ptr-next;/*圖(3)之步驟(1)*/freenode(ptr);/*此函數將節點歸還給記憶體*/return(head);,範例:多項式的相加,多項式相加可以利用鏈結串列來完成。多項式以鏈結串列來表示的話,其資料結構如下:,其中COEF表示變數的係數EXP表示變數的指數LINK為指到下一節點的指標,假設有一多項式以鏈結串列表示如下:,假設兩個多項式 與 相加若以單向鏈結串列方式呈現則其C語言程式如下:void poly_add(struct node*eq_hl,struct node*eq_h2,struct node*ans_h,struct node*ptr)struct poly*this_nl,*this_n2,*prev;this_n1=eq_h1;this_n2=eq_h2;prev=NULL;,while(this_n1!=NULL|this_n2!=NULL)/*當兩個多項式皆相加完則結束*/ptr=(struct poly*)malloc(sizeof(struct poly);ptr-next=NULL;/第一個多項式指數大於第二個多項式if(this_n1!=NULL,/第一個多項式指數大於第二個多項式elseif(this_n1!=NULL,/兩個多項式指數相等,進行相加elseptr-coef=this_n1-coef;ptr-exp=this_n1-exp;this_n1=this_n1-next;ptr-coef=this_n1-coef;+this_n2-coef;ptr-exp=this_n1-exp;if(this_n1!=NULL)this_n1=this_n1-next;if(this_n1!=NULL)this_n2=this_n2-next;if(ptr-coef!=0)if(ans_h=NULL)ans_h=ptr;else prev-next=ptr;prev=ptr;else free(ptr);,

    注意事项

    本文(《单向链结串列》PPT课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开