C与C++语言介绍.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C与C++语言介绍

第三章 鏈結串列 串列及鏈結串列 串列 是許多項目有順序的排列,可以用陣列結構來儲存串列。根據元素在陣列中的位置可以判斷元素之間的順序。 用陣列結構來儲存串列的優缺點是: 優點: 只要標明元素註標,就能很快讀寫此元素,亦即陣列的隨機存取(random access) 的效率高。? 缺點:插入 (insert) 和刪除 (delete) 元素的動作,需要時間複雜度為 O(n)。這是因為陣列元素間的實體位置(physical location)是連續的,因此元素的插入和刪除必須進行資料的搬移,以便維持新的次序。如果必須時常進行插入和刪除運算,代價將會相當大。 鏈結串列 的元素之間不必實體連續,只要有邏輯上的順序存在即可,鏈結 (link)就是用來維持這順序的工具 。鏈結串列的優點是可以輕易的插入新節點,以及刪除舊節點,不需搬移資料,只要改變鏈結。 class ListNode { object data; ListNode next; } public interface List { boolean isEmpty(); void makeEmpty(); } 鏈結串列運算方法 鏈結串列的運算方法不外乎是對資料的取得、刪除、插入等動作。但有時我們需要額外的方法來檢驗鏈結串列,這些都可以寫在Java的interface中。 public interface ListItr { void insert(Object x) throws ItemNotFound; boolean find(Object x); void remove(Object x) throws ItemNotFound; boolean isInList(); Object retrieve(); void zeroth(); void first(); void advance(); } 陣列結構實作鏈結串列 插入節點 boolean ListInsert(ListNode table[], String d, unsigned i) { int EmptyNode: EmptyNode = GetFreeNode(table); /* 找空節點 */ If( EmptyNode ==0) /* 已經沒有空節點 */ return false; table[EmptyNode].data = d; table[EmptyNode].next=table[i].next; table[i].next=EmptyNode; return TRUE; } int GetFreeNode(ListNode arr[]) { int length = arr.length; int i=0; while(i=length) { if(arr[i].next==-1) return I; } return 0; } 3-2-2 刪除節點 void ListDelete(ListNode table[], int i) { int Prenode; Prenode = GetPreNode(table, i); Table[Prenode].next=table[i].next; Table[i].next=-1; } int GetPreNode(ListNode arr[], int i) { int prenode=0, node=arr[prenode].next; while(node != i) { prenode=node; node=arr[node].next; } return (prenode); } 動態配置節點實作鏈結串列 利用陣列來實作鏈結串列會有浪費空間的情形,為了解決這問題,我們可以利用動態配置記憶體的方式來實做鏈結串列。 插入新節點 public void insert(Object x) throws ItemNotFound { if(current == null) throw new ItemNotFound(“Insertion error”); ListNode newNode = new ListNode(x, current.next); Current = current.next = newNode; } 刪除節點 public void remove( Object x ) throws ItemNotFound { ListNode itr = theList.header; while( itr.next != null !itr.next.element.equals(x)) itr = it

文档评论(0)

sunshaoying + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档