- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章 資料結構 7-1 陣列 7-2 鏈結串列 7-3 堆疊和佇列 7-4 樹狀結構 7-1 陣列 表示一系列相同型態的資料,如:學號1號到5號同學的數學成績 範例宣告: int score[5]; 陣列內資料的指定可利用註標,範例如下: 陣列的順序 邏輯順序:也就是註標的順序 實體順序 :在記憶體裡的順序,示意圖如下: 陣列的實體順序,也是由註標小的依序排到註標大的,正好和邏輯順序一樣;所以,某一個註標在記憶體的位置可以很快決定出來,其公示如下: 二維陣列 應用範例:同時表示5位同學的數學成績和英文成績 範例宣告: int scores[2][5]; 所有同學的數學成績可以記錄在 “scores” 二維陣列的第一列,英文成績可以記錄在 “scores” 二維陣列的第二列,每個同學這兩科成績的對應註標如下所示: 二維陣列的實體順序 以列為主:先存放好第一「列」的元素,接著再存放第二「列」,依此類推 其示意圖如下: 其公式如下: 以欄為主:先存放好第一「欄」的元素,接著再存放第二「欄 」,依此類推,其公式如下: 7-2 鏈結串列 可表示不確定大小或會動態增減的資料 由一個個節點所組成,其資料型態宣告如下: 宣告一個指標變數 “front”,用來指到一個鏈結串列的起始節點: 鏈結串列範例如下: 指標變數 根據C語言的語法,在宣告一個變數時前面加上符號 「*」,即為指標變數 指標變數記錄的值是資料在記憶體裡的位置 取出資料的方法 在變數前面加上符號 「*」,如 「*front.data」會傳回該節點在 “data”欄位的值 在變數後面加上箭頭 “-” ,如「front-data」 空指標 表示為 “null” 通常用來表示一個串列的結束 鏈結串列程序(一) 把一個新的節點加入到鏈結串列的起點 程序 “insert” 定義如下: 程序insert執行步驟 執行 「insert(front, 7) 」的步驟 利用 “malloc”函數建立一個新的節點,並利用局部變數 “temp”指到該節點; 把數值 “7”指定給節點 “temp”的欄位 “data”; 將節點 “temp”的欄位 “next” 指到 “p”所指到的節點,也就是串列的第一個節點; 將參數 “p”(也就是 “front”)指到新建立的節點。 執行之後的鏈結串列如下所示 鏈結串列的實體順序 鏈結串列的實體順序和邏輯順序無關。 原因:利用函數 “malloc”向系統要一塊記憶體的空間時,系統會根據當時記憶體哪裡有空位 實體順序的示意圖: 要取出鏈結串列的某一個節點,只能依循事先建立好的指標,一一探訪中間經過的節點。 鏈結串列程序(二) 把一個鏈結串列內所有節點的內容值依照邏輯順序列出來 程序 “print_linked_list” 定義如下: 鏈結串列程序(三) 把第一個參數 “p”指到的鏈結串列的起始節點,變成第二個參數 “q” 指到的鏈結串列的起始節點 程序 “changehead” 定義如下: 7-3 堆疊和佇列 堆疊 後進先出 先進後出 右圖範例 最早放進去的1號球會在球桶的最下方,而最後放進去的5號球會在球桶的最上方。 要用球時,首先拿到的是球桶最上方的5號球,最後才會拿到1號球。 以陣列實作堆疊 宣告一個一維整數陣列來存放堆疊中的元素 int stack[10]; 定義整數變數 “top”,對應到最上層元素的註標 int top = -1; 定義將資料放入堆疊的程序 “push” 定義將資料從堆疊取出的程序 “pop” 佇列 佇列 先進先出 後進後出 下圖範例 最先駛入巷道的編號1號的車子會在最前面,最靠近燈號,其次為編號2號的車子。 綠燈的時候,首先開出巷道的會是等在最前面的1號車,接著是2號車。 以陣列實作佇列 宣告一個一維整數陣列來存放佇列中的元素 int queue[10]; 定義兩個變數 “front”和 “rear”,對應到最前面和最後面元素的註標 int front = -1; rear = -1; 定義將資料放入佇列的程序 “put” 定義將資料從佇列取出的程序 “get” 環狀佇列 特色:可以再度回到之前曾被使用過,但是現在已經是空的位置,以有效利用空間 範例資料宣告: int queue[6]; front = 0; rear = 0; 使用運算子 “%”,決定下一個要加入資料的註標位置 rear = (rear + 1)%6; 利用運算子 “%”,決定將資料取出的註標位置 front = (front + 1)%6; 判斷佇列是空的式子 front = = rear
文档评论(0)