第二章-数据结构与算法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二章 數據結構與算法 2.1基本要求 1.學習目的與要求 數據結構主要研究把具有一定邏輯關係的一批數據按某種存儲方式存放在計算機的存儲器中,并在這批數據上定義一系列操作.如何操作就是算法問題,算法與數據結構是相互聯繫的.算法總是建立在一定數據結構上的,合理的數據結構可以使算法簡單高效. 學習數據結構與算法的目的,是理解和掌握各種數據結構的定義及基本操作的實現,理解掌握典型的算法思想,算法設計方法和計算算法的時間複雜度. 2.本章重點 ⑴線性表,順序表和鏈錶,掌握線性表的概念,兩種存儲結構,優缺點及兩種存儲結構上的基本操作 ⑵棧與隊列,棧和隊列的概念,順序棧,鏈棧的操作,棧的應用,循環隊列,循環鏈隊列的操作 ⑶串的基本運算和模式匹配,串的基本運算的含義,瞭解模式匹配算法和時間複雜度 ⑷多維數組和廣義表,多維數組及特殊矩陣的地址公式,廣義表的運算和存儲 ⑸樹和二叉樹,樹,二叉樹的定義,術語,二叉樹的性質,存儲,遍歷,應用,線索二叉樹的概念,樹與二叉樹的關係 ⑹圖的存儲及其操作,圖的定義,術語,圖的存儲,圖的遍歷,圖的操作(最小生成樹,拓撲排序,關鍵路徑,最短路徑) ⑺表和樹的查找,表和樹的概念,平均比較次數,二叉排序樹和平衡二叉樹的插入,刪除,瞭解B-樹的定義 ⑻Hash技術,哈希表構造,解決衝突的方法及哈希表的查找 ⑼排序算法,直接插入排序,冒泡排序,簡單選擇排序,快速排序,堆排序,歸并排序和希爾排序算法和時間發雜度,瞭解基數排序,外排序的概念和算法 ⑽算法設計方法,分治法,遞推法,貪心法,回溯法,動態規劃發和分支界法 2.2基本內容 2.2.1數據結構與算法概念 數據結構,數據結構DS=(A,R),其中A是數據元素的非空有限集合,R是定義在A上的關係的非空有限集合,結構就元素之間的關係 算法,就是解決問題的方法和步驟 算法的時間複雜度,算法語句中重複執行的次數(或稱語句頻度),或算法中基本操作次數,一般用數量級O()來描述 2.2.2線性表 線性表的定義,線性表是n(n=0)個元素的有限序列,當n=0時,稱為空表,當n0時,線性表通常表示為(a1,a2,a3,……,an),其中a1無前驅,an無後繼,其餘結點有且只有一個前驅和一個後繼 線性表的存儲,線性表有順序存儲和鏈式存儲兩種結構 順序存儲結構,在連續的存儲空間中依次存儲線性表的各個元素,具體用一維數組來得到連續的存儲空間 順序存儲的結構特點,存儲位置上直接反映了元素的邏輯關係,不需要指出前驅後繼,操作特點,便於查找,不便於插入,刪除 鏈式存儲結構,在任意(連續或不連續)的存儲空間中存放線性表的各元素,所以每個結點要帶指針指出前驅後繼,用動態分配空間實現. 單鏈結構,結點的指針域中只有一根指針指向後繼,最後一個結點的指針值未null,每個結點只能找到後繼,不能找到前驅,便於插入,刪除,不便於查找 單循環結構,最後一個結點的指針指向首結點,特點便於插入和刪除,尤其是在首端和尾端插入刪除更方便 雙鏈結構,每個結點帶有指向前驅和指向後繼的兩個指針,優點查找結點的前驅和後繼方便,缺點是存儲空間開銷比較大 線性表的操作,主要有初始化,判空表,求表長度,查找,插入和刪除 靜態數組 #Define ArSize 10 Typedef Struct{ ElemType elem[ArSize]; Int length;} SqList; void initList(sqList *L) { L-length=0; } 動態數組 Typedef Struct{ Elemtype *elem; Int length,ArSize;}sqlist; void initlist(sqllist *L,int n) { L-elem=(Elemtype*)malloc(n*Sizeof(Elemtype)); L-ArSize=n; L-length=0; } 查找時間複雜度O(1) 插入O(n/2),刪除O((n-1)/2) 鏈式存儲結構 TypeDef Struct Node { Elemtype Data; Struct Node *next; }LNode; LNode *initLK() { Lnode *head; Head=Null; Return Head; } 查找元素平均比較次數O((n+1)/2) 查找,刪除O(1) 例 在非空的雙鏈錶中刪除指針P所指向的結點. P-Front-Next=P-Next P-Next-Front=P-Front 在非空的雙鏈錶中指針P所指向的結點前插入一個新結點Q Q-Next=P Q-Front=P-Front

文档评论(0)

wx171113 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档