:: wikimiki.org ::
Æ•°æ®ç»“æž„
æ•°æ®ç»“æž„
æ•°æ®ç»“构(Data Structure )是计算机å˜å‚¨ã€ç»„ç»‡æ•°æ® çš„æ–¹å¼ã€‚通常情况下,精心选择的数æ®ç»“æž„å¯ä»¥å¸¦æ¥æ›´é«˜çš„è¿è¡Œæˆ–者å˜å‚¨æ•ˆçŽ‡çš„ç®—æ³• 。数æ®ç»“构往往åŒé«˜æ•ˆçš„æ£€ç´¢ç®—法 和索引技术 有关。
在许多类型的程åºçš„设计ä¸ï¼Œæ•°æ®ç»“æž„çš„é€‰æ‹©æ˜¯ä¸€ä¸ªåŸºæœ¬çš„è®¾è®¡è€ƒè™‘å› ç´ ã€‚è®¸å¤šå¤§åž‹ç³»ç»Ÿçš„æž„é€ ç»éªŒè¡¨æ˜Žï¼Œç³»ç»Ÿå®žçŽ°çš„å›°éš¾ç¨‹åº¦å’Œç³»ç»Ÿæž„é€ çš„è´¨é‡éƒ½ä¸¥é‡çš„ä¾èµ–于是å¦é€‰æ‹©äº†æœ€ä¼˜çš„æ•°æ®ç»“构。许多时候,确定了数æ®ç»“æž„åŽï¼Œç®—法就容易得到了。有些时候事情也会å过æ¥ï¼Œæˆ‘ä»¬æ ¹æ®ç‰¹å®šç®—法æ¥é€‰æ‹©æ•°æ®ç»“构与之适应。ä¸è®ºå“ªç§æƒ…况,选择åˆé€‚的数æ®ç»“构都是éžå¸¸é‡è¦çš„。
选择了数æ®ç»“构,算法也éšä¹‹ç¡®å®šï¼Œæ˜¯æ•°æ®è€Œä¸æ˜¯ç®—æ³•æ˜¯ç³»ç»Ÿæž„é€ çš„å…³é”®å› ç´ ã€‚è¿™ç§æ´žè§å¯¼è‡´äº†è®¸å¤šç§è½¯ä»¶è®¾è®¡æ–¹æ³• 和程åºè®¾è®¡è¯è¨€ 的出现,é¢å‘对象的程åºè®¾è®¡ è¯è¨€å°±æ˜¯å…¶ä¸ä¹‹ä¸€ã€‚
在计算机科å¦ä¸ï¼Œæ•°æ®ç»“æž„æ˜¯ä¸€é—¨ç ”ç©¶éžæ•°å€¼è®¡ç®—的程åºè®¾è®¡é—®é¢˜ä¸è®¡ç®—机的æ“作对象(数æ®å…ƒç´ )以åŠå®ƒä»¬ä¹‹é—´çš„关系和è¿ç®—ç‰çš„å¦ç§‘,而且确ä¿ç»è¿‡è¿™äº›è¿ç®—åŽæ‰€å¾—到的新结构ä»ç„¶æ˜¯åŽŸæ¥çš„结构类型。
“数æ®ç»“æž„â€ä½œä¸ºä¸€é—¨ç‹¬ç«‹çš„课程在国外是从1968å¹´æ‰å¼€å§‹è®¾ç«‹çš„。 1968年美国å”·欧·克努特 教授开创了数æ®ç»“构的最åˆä½“系,他所著的《计算机程åºè®¾è®¡æŠ€å·§ã€‹ç¬¬ä¸€å·ã€ŠåŸºæœ¬ç®—法》是第一本较系统地é˜è¿°æ•°æ®çš„逻辑结构和å˜å‚¨ç»“æž„åŠå…¶æ“作的著作。“数æ®ç»“æž„â€åœ¨è®¡ç®—机科å¦ä¸æ˜¯ä¸€é—¨ç»¼åˆæ€§çš„专业基础课。数æ®ç»“构是介于数å¦ã€è®¡ç®—æœºç¡¬ä»¶å’Œè®¡ç®—æœºè½¯ä»¶ä¸‰è€…ä¹‹é—´çš„ä¸€é—¨æ ¸å¿ƒè¯¾ç¨‹ã€‚æ•°æ®ç»“构这一门课的内容ä¸ä»…是一般程åºè®¾è®¡ï¼ˆç‰¹åˆ«æ˜¯éžæ•°å€¼æ€§ç¨‹åºè®¾è®¡ï¼‰çš„基础,而且是设计和实现编译程åºã€æ“ä½œç³»ç»Ÿã€æ•°æ®åº“系统åŠå…¶ä»–系统程åºçš„é‡è¦åŸºç¡€ã€‚
è®¡ç®—æœºæ˜¯ä¸€é—¨ç ”ç©¶ç”¨è®¡ç®—æœºè¿›è¡Œä¿¡æ¯è¡¨ç¤ºå’Œå¤„ç†çš„ç§‘å¦ã€‚è¿™é‡Œé¢æ¶‰åŠåˆ°ä¸¤ä¸ªé—®é¢˜ï¼š
- ä¿¡æ¯çš„表示
- ä¿¡æ¯çš„处ç†
而信æ¯çš„表示和组åˆç›´æŽ¥å…³ç³»åˆ°å¤„ç†ä¿¡æ¯çš„程åºçš„æ•ˆçŽ‡ã€‚éšç€è®¡ç®—机的普åŠï¼Œä¿¡æ¯é‡çš„å¢žåŠ ï¼Œä¿¡æ¯èŒƒå›´çš„æ‹“宽,使许多系统程åºå’Œåº”用程åºçš„规模很大,结构åˆç›¸å½“夿‚ã€‚å› æ¤ï¼Œä¸ºäº†ç¼–写出一个“好â€çš„程åºï¼Œå¿…须分æžå¾…处ç†çš„对象的特å¾åŠå„对象之间å˜åœ¨çš„关系,这就是数æ®ç»“构这门课所è¦ç ”ç©¶çš„é—®é¢˜ã€‚ä¼—æ‰€å‘¨çŸ¥ï¼Œè®¡ç®—æœºçš„ç¨‹åºæ˜¯å¯¹ä¿¡æ¯è¿›è¡ŒåР工处ç†ã€‚在大多数情况下,这些信æ¯å¹¶ä¸æ˜¯æ²¡æœ‰ç»„织,信æ¯ï¼ˆæ•°æ®ï¼‰ä¹‹é—´å¾€å¾€å…·æœ‰é‡è¦çš„结构关系,这就是数æ®ç»“构的内容。数æ®çš„结构,直接影å“算法的选择和效率。
计算机解决一个具体问题时,大致需è¦ç»è¿‡ä¸‹åˆ—å‡ ä¸ªæ¥éª¤ï¼šé¦–å…ˆè¦ä»Žå…·ä½“é—®é¢˜ä¸æŠ½è±¡å‡ºä¸€ä¸ªé€‚å½“çš„æ•°å¦æ¨¡åž‹ï¼Œç„¶åŽè®¾è®¡ä¸€ä¸ªè§£æ¤æ•°å¦æ¨¡åž‹çš„算法 (Algorithm),最åŽç¼–出程åºã€è¿›è¡Œæµ‹è¯•ã€è°ƒæ•´ç›´è‡³å¾—到最终解ç”ã€‚å¯»æ±‚æ•°å¦æ¨¡åž‹çš„实质是分æžé—®é¢˜ï¼Œä»Žä¸æå–æ“作的对象,并找出这些æ“ä½œå¯¹è±¡ä¹‹é—´å«æœ‰çš„关系,然åŽç”¨æ•°å¦çš„è¯è¨€åР以æè¿°ã€‚计算机算法与数æ®çš„ç»“æž„å¯†åˆ‡ç›¸å…³ï¼Œç®—æ³•æ— ä¸ä¾é™„于具体的数æ®ç»“构,数æ®ç»“构直接关系到算法的选择和效率。è¿ç®—是由计算机æ¥å®Œæˆï¼Œè¿™å°±è¦è®¾è®¡ç›¸åº”çš„æ’å…¥ã€åˆ 除和修改的算法 。也就是说,数æ®ç»“构还需è¦ç»™å‡ºæ¯ç§ç»“构类型所定义的å„ç§è¿ç®—的算法。
æ•°æ® æ˜¯å¯¹å®¢è§‚äº‹ç‰©çš„ç¬¦å·è¡¨ç¤ºï¼Œåœ¨è®¡ç®—机科å¦ä¸æ˜¯æŒ‡æ‰€æœ‰èƒ½è¾“入到计算机ä¸å¹¶ç”±è®¡ç®—机程åºå¤„ç†çš„符å·çš„æ€»ç§°ã€‚
æ•°æ®å…ƒç´ 是数æ®çš„基本å•ä½ï¼Œåœ¨è®¡ç®—机程åºä¸é€šå¸¸ä½œä¸ºä¸€ä¸ªæ•´ä½“考虑。一个数æ®å…ƒç´ 由若干个数æ®é¡¹ç»„æˆã€‚æ•°æ®é¡¹æ˜¯æ•°æ®çš„ä¸å¯åˆ†å‰²çš„æœ€å°å•ä½ã€‚有两类数æ®å…ƒç´ :一类是ä¸å¯åˆ†å‰²çš„原å型数æ®å…ƒç´ ,如:整数"5",å—符 "N" ç‰ï¼›å¦ä¸€ç±»æ˜¯ç”±å¤šä¸ªæ¬¾é¡¹æž„æˆçš„æ•°æ®å…ƒç´ ï¼Œå…¶ä¸æ¯ä¸ªæ¬¾é¡¹è¢«ç§°ä¸ºä¸€ä¸ªæ•°æ®é¡¹ã€‚例如æè¿°ä¸€ä¸ªå¦ç”Ÿçš„ä¿¡æ¯çš„æ•°æ®å…ƒç´ å¯ç”±ä¸‹åˆ—6个数æ®é¡¹ç»„æˆã€‚å…¶ä¸çš„出身日期åˆå¯ä»¥ç”±ä¸‰ä¸ªæ•°æ®é¡¹ï¼š"å¹´"ã€"月"å’Œ"æ—¥"组æˆï¼Œåˆ™ç§°"出身日期"为组åˆé¡¹ï¼Œè€Œå…¶å®ƒä¸å¯åˆ†å‰²çš„æ•°æ®é¡¹ä¸ºåŽŸå项。
关键嗿Œ‡çš„æ˜¯èƒ½è¯†åˆ«ä¸€ä¸ªæˆ–多个数æ®å…ƒç´ 的数æ®é¡¹ã€‚若能起唯一识别作用,则称之为 "主" 关键å—,å¦åˆ™ç§°ä¹‹ä¸º "次" 关键å—。
æ•°æ®å¯¹è±¡ 是性质相åŒçš„æ•°æ®å…ƒç´ 的集åˆï¼Œæ˜¯æ•°æ®çš„一个å集。数æ®å¯¹è±¡å¯ä»¥æ˜¯æœ‰é™çš„,也å¯ä»¥æ˜¯æ— é™çš„。
æ•°æ®å¤„ç† æ˜¯æŒ‡å¯¹æ•°æ®è¿›è¡ŒæŸ¥æ‰¾ã€æ’å…¥ã€åˆ 除ã€åˆå¹¶ã€æŽ’åºã€ç»Ÿè®¡ä»¥åŠç®€å•计算ç‰çš„æ“ä½œè¿‡ç¨‹ã€‚åœ¨æ—©æœŸï¼Œè®¡ç®—æœºä¸»è¦ç”¨äºŽç§‘å¦å’Œå·¥ç¨‹è®¡ç®—,进入八å年代以åŽï¼Œè®¡ç®—机主è¦ç”¨äºŽæ•°æ®å¤„ç†ã€‚æ®æœ‰å…³ç»Ÿè®¡èµ„料表明,现在计算机用于数æ®å¤„ç†çš„æ—¶é—´æ¯”例达到80%以上,éšç€æ—¶é—´çš„æŽ¨ç§»å’Œè®¡ç®—æœºåº”ç”¨çš„è¿›ä¸€æ¥æ™®åŠï¼Œè®¡ç®—机用于数æ®å¤„ç†çš„æ—¶é—´æ¯”例必将进一æ¥å¢žå¤§ã€‚
æ•°æ®ç»“构是指åŒä¸€æ•°æ®å…ƒç´ ç±»ä¸å„æ•°æ®å…ƒç´ 之间å˜åœ¨çš„关系。数æ®ç»“构分别为逻辑结构 ã€å˜å‚¨ç»“æž„ (物ç†ç»“æž„ )和数æ®çš„è¿ç®—。数æ®çš„逻辑结构是对数æ®ä¹‹é—´å…³ç³»çš„æè¿°ï¼Œæœ‰æ—¶å°±æŠŠé€»è¾‘结构简称为数æ®ç»“构。逻辑结构形å¼åœ°å®šä¹‰ä¸ºï¼ˆK,R)(或(D,S)),其ä¸ï¼ŒK是数æ®å…ƒç´ 的有é™é›†ï¼ŒR是K上的关系的有é™é›†ã€‚
æ•°æ®å…ƒç´ ç›¸äº’ä¹‹é—´çš„å…³ç³»ç§°ä¸ºç»“æž„ã€‚æœ‰å››ç±»åŸºæœ¬ç»“æž„ï¼šé›†åˆ ã€çº¿æ€§ç»“æž„ ã€æ ‘形结构 ã€å›¾çŠ¶ç»“æž„ (网状结构 ï¼‰ã€‚æ ‘å½¢ç»“æž„å’Œå›¾å½¢ç»“æž„å…¨ç§°ä¸ºéžçº¿æ€§ç»“æž„ 。集åˆç»“æž„ä¸çš„æ•°æ®å…ƒç´ 除了åŒå±žäºŽä¸€ç§ç±»åž‹å¤–ï¼Œåˆ«æ— å…¶å®ƒå…³ç³»ã€‚çº¿æ€§ç»“æž„ä¸å…ƒç´ 之间å˜åœ¨ä¸€å¯¹ä¸€å…³ç³»ï¼Œæ ‘形结构ä¸å…ƒç´ 之间å˜åœ¨ä¸€å¯¹å¤šå…³ç³»ï¼Œå›¾å½¢ç»“æž„ä¸å…ƒç´ 之间å˜åœ¨å¤šå¯¹å¤šå…³ç³»ã€‚åœ¨å›¾å½¢ç»“æž„ä¸æ¯ä¸ªç»“点的å‰é©±ç»“点数和åŽç»ç»“点数å¯ä»¥ä»»æ„多个。
æ•°æ®ç»“构在计算机ä¸çš„è¡¨ç¤ºï¼ˆæ˜ åƒï¼‰ç§°ä¸ºæ•°æ®çš„物ç†ï¼ˆå˜å‚¨ï¼‰ç»“构。它包括数æ®å…ƒç´ 的表示和关系的表示。数æ®å…ƒç´ 之间的关系有两ç§ä¸åŒçš„è¡¨ç¤ºæ–¹æ³•ï¼šé¡ºåºæ˜ 象和éžé¡ºåºæ˜ 象,并由æ¤å¾—到两ç§ä¸åŒçš„å˜å‚¨ç»“构:顺åºå˜å‚¨ç»“构和链å¼å˜å‚¨ç»“构。顺åºå˜å‚¨æ–¹æ³•:它是把逻辑上相邻的结点å˜å‚¨åœ¨ç‰©ç†ä½ç½®ç›¸é‚»çš„å˜å‚¨å•元里,结点间的逻辑关系由å˜å‚¨å•元的邻接关系æ¥ä½“现,由æ¤å¾—到的å˜å‚¨è¡¨ç¤ºç§°ä¸ºé¡ºåºå˜å‚¨ç»“构。顺åºå˜å‚¨ç»“æž„æ˜¯ä¸€ç§æœ€åŸºæœ¬çš„å˜å‚¨è¡¨ç¤ºæ–¹æ³•,通常借助于程åºè®¾è®¡è¯è¨€ä¸çš„æ•°ç»„æ¥å®žçŽ°ã€‚é“¾æŽ¥å˜å‚¨æ–¹æ³•:它ä¸è¦æ±‚逻辑上相邻的结点在物ç†ä½ç½®ä¸Šäº¦ç›¸é‚»ï¼Œç»“ç‚¹é—´çš„é€»è¾‘å…³ç³»æ˜¯ç”±é™„åŠ çš„æŒ‡é’ˆå—æ®µè¡¨ç¤ºçš„。由æ¤å¾—到的å˜å‚¨è¡¨ç¤ºç§°ä¸ºé“¾å¼å˜å‚¨ç»“构,链å¼å˜å‚¨ç»“构通常借助于程åºè®¾è®¡è¯è¨€ä¸çš„æŒ‡é’ˆç±»åž‹æ¥å®žçŽ°ã€‚ç´¢å¼•å˜å‚¨æ–¹æ³•:除建立å˜å‚¨ç»“点信æ¯å¤–ï¼Œè¿˜å»ºç«‹é™„åŠ çš„ç´¢å¼•è¡¨æ¥æ ‡è¯†ç»“点的地å€ã€‚散列å˜å‚¨æ–¹æ³•ï¼šå°±æ˜¯æ ¹æ®ç»“点的关键å—直接计算出该结点的å˜å‚¨åœ°å€ã€‚
æ•°æ®ç»“æž„ä¸ï¼Œé€»è¾‘上(逻辑结构:数æ®å…ƒç´ 之间的逻辑关系)å¯ä»¥æŠŠæ•°æ®ç»“构分æˆçº¿æ€§ç»“构和éžçº¿æ€§ç»“构。线性结构的顺åºå˜å‚¨ç»“构是一ç§éšæœºå˜å–çš„å˜å‚¨ç»“构,线性表的链å¼å˜å‚¨ç»“构是一ç§é¡ºåºå˜å–çš„å˜å‚¨ç»“构。线性表若采用链å¼å˜å‚¨è¡¨ç¤ºæ—¶æ‰€æœ‰ç»“点之间的å˜å‚¨å•元地å€å¯è¿žç»å¯ä¸è¿žç»ã€‚逻辑结构与数æ®å…ƒç´ 本身的形å¼ã€å†…容ã€ç›¸å¯¹ä½ç½®ã€æ‰€å«ç»“ç‚¹ä¸ªæ•°éƒ½æ— å…³ã€‚
算法的设计å–决于数æ®ï¼ˆé€»è¾‘)结构,而算法的实现ä¾èµ–于采用的å˜å‚¨ç»“构。数æ®çš„è¿ç®—是在数æ®çš„逻辑结构上定义的æ“ä½œç®—æ³•ï¼Œå¦‚æ£€ç´¢ã€æ’å…¥ã€åˆ é™¤ã€æ›´æ–°çš„æŽ’åºç‰ã€‚
æ•°æ®ç»“构的形å¼å®šä¹‰ä¸ºï¼šæ•°æ®ç»“构是一个二元组:
Data-Structure=(D,S)
å…¶ä¸ï¼šD是数æ®å…ƒç´ 的有é™é›†ï¼ŒS是D上关系的有é™é›†ã€‚
æ•°æ®ç»“æž„ä¸åŒäºŽæ•°æ®ç±»åž‹ï¼Œä¹Ÿä¸åŒäºŽæ•°æ®å¯¹è±¡ï¼Œå®ƒä¸ä»…è¦æè¿°æ•°æ®ç±»åž‹çš„æ•°æ®å¯¹è±¡ï¼Œè€Œä¸”è¦æè¿°æ•°æ®å¯¹è±¡å„å…ƒç´ ä¹‹é—´çš„ç›¸äº’å…³ç³»ã€‚
æ•°æ®ç±»åž‹ 是一个值的集åˆå’Œå®šä¹‰åœ¨è¿™ä¸ªå€¼é›†ä¸Šçš„一组æ“作的总称。数æ®ç±»åž‹å¯åˆ†ä¸ºä¸¤ç±»ï¼šåŽŸå类型ã€ç»“构类型。一方é¢ï¼Œåœ¨ç¨‹åºè®¾è®¡è¯è¨€ä¸ï¼Œæ¯ä¸€ä¸ªæ•°æ®éƒ½å±žäºŽæŸç§æ•°æ®ç±»åž‹ã€‚类型明显或éšå«åœ°è§„定了数æ®çš„å–值范围ã€å˜å‚¨æ–¹å¼ä»¥åŠå…许进行的è¿ç®—。å¯ä»¥è®¤ä¸ºï¼Œæ•°æ®ç±»åž‹æ˜¯åœ¨ç¨‹åºè®¾è®¡ä¸å·²ç»å®žçŽ°äº†çš„æ•°æ®ç»“构。å¦ä¸€æ–¹é¢ï¼Œåœ¨ç¨‹åºè®¾è®¡è¿‡ç¨‹ä¸ï¼Œå½“需è¦å¼•å…¥æŸç§æ–°çš„æ•°æ®ç»“构时,总是借助编程è¯è¨€æ‰€æä¾›çš„æ•°æ®ç±»åž‹æ¥æè¿°æ•°æ®çš„å˜å‚¨ç»“构。
计算机ä¸è¡¨ç¤ºæ•°æ®çš„æœ€å°å•使˜¯äºŒè¿›åˆ¶æ•°çš„一ä½ï¼Œå«åšä½ã€‚我们用一个由若干ä½ç»„åˆèµ·æ¥å½¢æˆçš„一个ä½ä¸²è¡¨ç¤ºä¸€ä¸ªæ•°æ®å…ƒç´ ,通常称这个ä½ä¸²ä¸ºå…ƒç´ 或结点。当数æ®å…ƒç´ 由若干数æ®é¡¹ç»„æˆæ—¶ï¼Œä½ä¸²ä¸å¯¹åº”于å„个数æ®é¡¹çš„åä½ä¸²ç§°ä¸ºæ•°æ®åŸŸã€‚å…ƒç´ æˆ–ç»“ç‚¹å¯çœ‹æˆæ˜¯æ•°æ®å…ƒç´ 在计算机ä¸çš„æ˜ 象。
一个软件系统框架应建立在数æ®ä¹‹ä¸Šï¼Œè€Œä¸æ˜¯å»ºç«‹åœ¨æ“ä½œä¹‹ä¸Šã€‚ä¸€ä¸ªå«æŠ½è±¡æ•°æ®ç±»åž‹çš„软件模å—应包å«å®šä¹‰ã€è¡¨ç¤ºã€å®žçŽ°ä¸‰ä¸ªéƒ¨åˆ†ã€‚
对æ¯ä¸€ä¸ªæ•°æ®ç»“构而言,必定å˜åœ¨ä¸Žå®ƒå¯†åˆ‡ç›¸å…³çš„一组æ“作。若æ“作的ç§ç±»å’Œæ•°ç›®ä¸åŒï¼Œå³ä½¿é€»è¾‘结构相åŒï¼Œæ•°æ®ç»“构能起的作用也ä¸åŒã€‚
ä¸åŒçš„æ•°æ®ç»“构其æ“作集ä¸åŒï¼Œä½†ä¸‹åˆ—æ“作必ä¸å¯ç¼ºï¼š
#结构的生æˆï¼›
#结构的销æ¯ï¼›
#åœ¨ç»“æž„ä¸æŸ¥æ‰¾æ»¡è¶³è§„定æ¡ä»¶çš„æ•°æ®å…ƒç´ ï¼›
#åœ¨ç»“æž„ä¸æ’入新的数æ®å…ƒç´ ï¼›
#åˆ é™¤ç»“æž„ä¸å·²ç»å˜åœ¨çš„æ•°æ®å…ƒç´ ï¼›
#é历。
抽象数æ®ç±»åž‹ ï¼šä¸€ä¸ªæ•°å¦æ¨¡åž‹ä»¥åŠå®šä¹‰åœ¨è¯¥æ¨¡åž‹ä¸Šçš„一组æ“作。抽象数æ®ç±»åž‹å®žé™…上就是对该数æ®ç»“æž„çš„å®šä¹‰ã€‚å› ä¸ºå®ƒå®šä¹‰äº†ä¸€ä¸ªæ•°æ®çš„逻辑结构以åŠåœ¨æ¤ç»“构上的一组算法。抽象数æ®ç±»åž‹å¯ç”¨ä»¥ä¸‹ä¸‰å…ƒç»„表示:(D,S,P)。D是数æ®å¯¹è±¡ï¼ŒS是D上的关系集,P是对D的基本æ“作集。ADT的定义为:
ADT 抽象数æ®ç±»åž‹å ADT 抽象数æ®ç±»åž‹å;
抽象数æ®ç±»åž‹æœ‰ä¸¤ä¸ªé‡è¦ç‰¹æ€§ï¼š
- æ•°æ®æŠ½è±¡
- 用ADTæè¿°ç¨‹åºå¤„ç†çš„实体时,强调的是其本质的特å¾ã€å…¶æ‰€èƒ½å®Œæˆçš„功能以åŠå®ƒå’Œå¤–部用户的接å£ï¼ˆå³å¤–界使用它的方法)。
- æ•°æ®å°è£…
- 将实体的外部特性和其内部实现细节分离,并且对外部用户éšè—其内部实现细节。
常用的数æ®ç»“æž„
- 离散 结构
- 集åˆ
- 并查集
- å—å…¸
- 有åºå—å…¸
- 线性结构
- 线性表
- 顺åºè¡¨
- 链表 (éµçµä¸²åˆ— )
- å•链表
- - 陿€å•链表
- - 跳表 (Skip list)
- åŒé“¾è¡¨
- 循环链表
- - å•循环链表
- - åŒå¾ªçŽ¯é“¾è¡¨
- 散列表 (哈希表 或雜湊表 )
- æ ˆ (å †ç–Š )
- 队列 (佇列 )
- 链队列
- 循环队列
- 优先队列 (æœ‰æ—¶ä½¿ç”¨å † æ¥å®žçް)
- åŒç«¯é˜Ÿåˆ—
- 串
- 跳跃表
- éžçº¿æ€§ç»“æž„
- 数组
- 二维数组 (矩阵 )
- 稀ç–矩阵
- 广义表
- æ ‘ 形结构
- äºŒå‰æ ‘ (二元樹 )
- å“ˆå¤«æ›¼æ ‘ ï¼ˆæœ€ä¼˜äºŒå‰æ ‘ )
- çº¿ç´¢äºŒå‰æ ‘
- äºŒå‰æŽ’åºæ ‘
- - å¹³è¡¡äºŒå‰æ ‘
- - AVLæ ‘
- - çº¢é»‘æ ‘
- - AAæ ‘
- - ä¼¸å±•æ ‘
- - çº¿æ®µæ ‘
- å †
- - 二å‰å †
- - äºŒé¡¹å †
- - æ–æ³¢çº³å¥‘å †
- - é…å¯¹å †
- 森林
- Bæ ‘
- 2-3-4æ ‘
- å‰–æžæ ‘
- åŽç¼€æ ‘
- Trie
- 四剿 ‘ (Quadtree)
- 八剿 ‘ (Octree)
- kdæ ‘
- ç”Ÿæˆæ ‘
- 最å°ç”Ÿæˆæ ‘
- 图 状结构(网 状结构)
- 有å‘图
- 有å‘网 (å¸¦æƒæœ‰å‘图 )
- æœ‰å‘æ— 环图 (DAG)
- - AOE网 (å¸¦æƒæœ‰å‘æ— çŽ¯å›¾ )
- - AOV网
- æ— å‘图
- æ— å‘网 (å¸¦æƒæ— å‘图 )
- 连通图
- 强连通图
- 完全图
- 稀ç–图
- ç¨ å¯†å›¾
- 表示方法
- 邻接矩阵
- 邻接表
- åå—链表
- 邻接多é‡è¡¨
- å…¶ä»–æ•°æ®ç»“æž„
- æ ‡ç¾è”åˆ
- è”åˆ
- 框架
- æ•°æ®åº“ 和“表â€
相关æ¡ç›®
- 算法
- 计算机科å¦
- 计算机科å¦è¯¾ç¨‹åˆ—表
å‚考文献
- Cliford A. Shafferï¼å¼ é“ç‰è¯‘:数æ®ç»“构与算法分æžï¼ˆC++版,第二版),电å工业出版社 ISBN 7-5053-7646-2/TP.4425 [http://www.china-pub.com/computers/common/info.asp?id=6469]
- ä¸¥è”šæ• å´ä¼Ÿæ°‘著:数æ®ç»“构(Cè¯è¨€ç‰ˆï¼‰ï¼Œæ¸…åŽå¤§å¦å‡ºç‰ˆç¤¾ ISBN 7-302-02368-9/TP.1185 [http://www.welan.com/html/00/32100.Html]
Category:æ•°æ®ç»“æž„
ja:データ構é€
ko:ìžë£Œêµ¬ì¡°
th:โครงสร้างข้à¸à¸¡à¸¹à¸¥
尼夿‹‰æ–¯Â·æ²ƒæ–¯ 尼夿‹‰æ–¯Â·æ²ƒæ–¯ï¼ˆNiklaus Wirth,1934å¹´ 2月15æ—¥ —),生於瑞士 溫特圖爾 ,是瑞士 è¨ˆç®—æ©Ÿç§‘å¸ å®¶ã€‚
從1963å¹´ 到1967å¹´ ,他æˆç‚ºæ–¯å¦ç¦å¤§å¦ 的計算機科å¸éƒ¨åŠ©ç†æ•™æŽˆï¼Œä¹‹å¾Œåˆåœ¨è‹é»Žä¸–å¤§å¦ æ“”ç•¶ç›¸åŒçš„è·ä½ã€‚1968å¹´ ,他æˆç‚ºETH 的信æ¯å¦ 教授,åˆå¾€æ–½ä¹å¸•æ´›é˜¿å°”æ‰˜ç ”ç©¶ä¸å¿ƒ 進修了兩年。
他是好幾ç§ç·¨ç¨‹èªžè¨€ 的主è¨è¨ˆå¸«ï¼š
- Algol W
- Modula
- Pascal
- Modula-2
- Oberon
他亦是Euler語言 的發明者之一。1984å¹´ ä»–å› ç™¼å±•äº†é€™äº›èªžè¨€è€Œç²å›¾çµå¥– 。他亦是Lilith電腦 å’ŒOberon系統 çš„è¨è¨ˆå’ŒåŸ·è¡ŒéšŠä¼çš„é‡è¦æˆå“¡ã€‚
ä»–çš„æ–‡ç« Program Development by Stepwise Refinement 視為軟體工程 ä¸çš„經典之作。他寫的一本書的書åAlgorithms + Data Structures = Programs (算法 +æ•°æ®ç»“æž„ =ç¨‹å¼ ï¼‰æ˜¯è¨ˆç®—æ©Ÿç§‘å¸çš„åå¥ã€‚
ææ´²äººé€šå¸¸éƒ½å°‡ä»–çš„åå—讀得æ£ç¢ºï¼Œè®€ä½œâ€œNih-klaus Virtâ€ï¼›ä½†ç¾Žåœ‹äººé€šå¸¸è®€æˆâ€œNickles Worthâ€è¿‘ä¼¼çš„éŸ³ã€‚æ–¼æ˜¯æœ‰äººä¾¿èªªï¼Œææ´²äººå‚³å€å‘¼å« ä»–ï¼Œç¾Žåœ‹äººå‚³å€¼å‘¼å« ä»–ã€‚
外部éˆçµ
- [http://www.cs.inf.ethz.ch/~wirth/ 他的主é ]
- [http://www.swissdelphicenter.ch/en/niklauswirth.php Pascal and its Successors]
- [http://www.acm.org/classics/dec95 Program Development by Stepwise Refinement], Communications of the ACM, Vol. 14, No. 4, Aprile 1971, pp. 221-227
category:瑞士人
category:程åºå“¡
æ•°æ® æ•°æ®æ˜¯å¯å®šä¹‰ä¸ºæ„义的实体,它涉åŠåˆ°äº‹ç‰©çš„å˜åœ¨å½¢å¼ã€‚它是关于事件的一组离散的客观的事实æè¿°ï¼Œæ˜¯æž„æˆä¿¡æ¯ 和知识 çš„åŽŸå§‹ææ–™ã€‚æ•°æ®å¯åˆ†ä¸ºæ¨¡æ‹Ÿæ•°æ® å’Œæ•°å—æ•°æ® ä¸¤å¤§ç±»ã€‚æ•°æ®æŒ‡è®¡ç®—æœºåŠ å·¥çš„â€œåŽŸæ–™â€ï¼Œå¦‚图形ã€å£°éŸ³ã€æ–‡å—ã€æ•°ã€å—符和符å·ç‰ã€‚
-
ja:データ
ko:ë°ì´í„°
simple:Data
é¢å‘对象的程åºè®¾è®¡ é¢å‘对象的程åºè®¾è®¡ï¼ˆObject Oriented Programming,简称OOP,亦有è¯ç‚ºç‰©ä»¶å°Žå‘),指一ç§ç¨‹åºè®¾è®¡èŒƒåž‹ ï¼ŒåŒæ—¶ä¹Ÿæ˜¯æ˜¯ä¸€ç§ç¨‹åºå¼€å‘的方法论 。它的最大特点是能够大幅度的æé«˜è½¯ä»¶é¡¹ç›®çš„æˆåŠŸçŽ‡ï¼Œå‡å°‘æ—¥åŽçš„维护费用,æé«˜è½¯ä»¶çš„å¯ç§»æ¤æ€§å’Œå¯é 性。
它的特å¾ä¸»è¦åŒ…æ‹¬ä»¥ä¸‹å‡ ä¸ªæ–¹é¢ï¼š
- 对象 的使用—对象的概念被广泛的使用在从建模到构建程åºçš„å„个方é¢ã€‚
- 抽象化 —将å„ç§ç‹¬ç«‹çš„æ“ä½œåˆ†è§£æˆä¸ºå¯ä»¥ç”¨å‘½å区分的å•元。
- å°è£…性 —ä¸åŒçš„æ“ä½œå…·æœ‰ä¸åŒçš„作用范围。
- å¤šæ€æ€§ —对于ä¸åŒæ•°æ®ç±»åž‹çš„相似æ“作使用相åŒçš„命å。
- 继承性 —类å¯ä»¥è¢«ç»§æ‰¿ï¼Œä»Žè€Œå®žçްä¸åŒå±‚次的对象。
抽象化是é¢å‘å°è±¡çš„一个é‡è¦ç‰¹å¾ä½†æ˜¯å¹¶ä¸æ˜¯å®ƒæ‰€ç‹¬æœ‰çš„特å¾ã€‚é‡ç”¨ 是é¢å‘å°è±¡çš„一个é‡è¦ä¼˜ç‚¹ã€‚
当我们æåˆ°é¢å‘对象的时候,它ä¸ä»…指一ç§ç¨‹åºè®¾è®¡æ–¹æ³•。它更多æ„义上是一ç§ç¨‹åºå¼€å‘范å¼ã€‚在这一方é¢ï¼Œæˆ‘们必须了解更多关于é¢å‘å¯¹è±¡çš„åˆ†æž ï¼ˆObject Oriented Analysis,简称OOA)和é¢å‘对象的设计 (Object Oriented Design,简称OOD)方é¢çš„知识。
基本ç†è®º
继承性
å¯ä»¥æŠŠåŒä¸€æ´¾ç”Ÿåˆ†æžçš„通用性方法分é…在åˆç†çš„祖先类层次上。父类的属性,åç±»ä¼šæ— æ¡ä»¶ç»§æ‰¿ã€‚
å°è£…性
éšè—具体实现的细节,有利于程åºçš„局部化,进而å‡å°ç¨‹åºå‡ºé”™çš„å¯èƒ½æ€§å’Œå¢žå¼ºå¯ç»´æŠ¤æ€§ã€‚
å¤šæ€æ€§
为åŽä»£ç±»è¡Œä¸ºæ–¹æ³•çš„å˜å¼‚æä¾›äº†ä¸€ç§å¯èƒ½æ€§ï¼Œå³ä½¿æ˜¯ä»ŽåŒä¸€ç¥–先派生下æ¥çš„行为,也å¯ä»¥å‘ç”Ÿå·®å¼‚åŒ–ï¼Œä»Žè€Œå¢žå¼ºäº†ç³»ç»Ÿçš„çµæ´»æ€§ã€‚
é¢å‘对象的è¯è¨€
支æŒéƒ¨åˆ†æˆ–ç»å¤§éƒ¨åˆ†é¢å‘对象特性的è¯è¨€å³å¯ç§°ä¸ºåŸºäºŽå¯¹è±¡çš„æˆ–é¢å‘对象的è¯è¨€ã€‚
早期,完全é¢å‘对象的è¯è¨€ä¸»è¦åŒ…括Smalltalk ç‰è¯è¨€ï¼Œç›®å‰è¾ƒä¸ºæµè¡Œçš„è¯è¨€ä¸æœ‰Java ã€C# ã€Eiffel ç‰ã€‚éšç€è½¯ä»¶å·¥ä¸šçš„å‘展,比较早的é¢å‘过程的è¯è¨€åœ¨è¿‘些年的å‘展ä¸ä¹Ÿçº·çº·å¸æ”¶äº†è®¸å¤šé¢å‘对象的概念,比如C ->C++ ,BASIC ->Visual Basic ->Visual Basic.NET ,Pascal ->Object Pascal ,Ada ->Ada95 。
基于类的模å¼
基于对象的模å¼
历å²
相关书ç±
相关内容
外部链接
Category:編程典範
Category:é¢å‘对象的程åºè®¾è®¡
ja:オブジェクト指å‘
ms:Pengaturcaraan Berorientasikan Objek
th:à¸à¸²à¸£à¹€à¸‚ียนโปรà¹à¸à¸£à¸¡à¹€à¸Šà¸´à¸‡à¸§à¸±à¸•ถุ
æ•°æ® æ•°æ®æ˜¯å¯å®šä¹‰ä¸ºæ„义的实体,它涉åŠåˆ°äº‹ç‰©çš„å˜åœ¨å½¢å¼ã€‚它是关于事件的一组离散的客观的事实æè¿°ï¼Œæ˜¯æž„æˆä¿¡æ¯ 和知识 çš„åŽŸå§‹ææ–™ã€‚æ•°æ®å¯åˆ†ä¸ºæ¨¡æ‹Ÿæ•°æ® å’Œæ•°å—æ•°æ® ä¸¤å¤§ç±»ã€‚æ•°æ®æŒ‡è®¡ç®—æœºåŠ å·¥çš„â€œåŽŸæ–™â€ï¼Œå¦‚图形ã€å£°éŸ³ã€æ–‡å—ã€æ•°ã€å—符和符å·ç‰ã€‚
-
ja:データ
ko:ë°ì´í„°
simple:Data
é›†åˆ é›†åˆï¼ˆæˆ–ç°¡ç¨±é›†ï¼‰æ˜¯åŸºæœ¬çš„æ•°å¦æ¦‚念,它是集åˆè®º çš„ç ”ç©¶å¯¹è±¡ã€‚æœ€ç°¡å–®çš„èªªæ³•ï¼Œå³æ˜¯åœ¨æœ€åŽŸå§‹çš„é›†åˆè«–â”€æœ´ç´ é›†åˆè«– ─ä¸çš„定義,集åˆå°±æ˜¯â€œä¸€å †æ±è¥¿â€ã€‚集åˆè£¡çš„“æ±è¥¿â€ï¼Œå«ä½œå…ƒç´ 。若然 x æ˜¯é›†åˆ A çš„å…ƒç´ ï¼Œè¨˜ä½œ x ∈ A 。
é›†åˆæ˜¯çŽ°ä»£æ•°å¦ ä¸ä¸€ä¸ªé‡è¦çš„基本概念。集åˆè®º 的基本ç†è®ºç›´åˆ°åä¹ä¸–纪 末æ‰è¢«åˆ›ç«‹ï¼ŒçŽ°åœ¨å·²ç»æ˜¯æ•°å¦æ•™è‚²ä¸ä¸€ä¸ªæ™®éå˜åœ¨çš„部分,在å°å¦æ—¶å°±å¼€å§‹å¦ä¹ 了。这里对被数å¦å®¶ä»¬ç§°ä¸º"ç›´è§‚çš„"或"æœ´ç´ çš„"集åˆè®ºè¿›è¡Œä¸€ä¸ªç®€çŸè€ŒåŸºæœ¬çš„介ç»ï¼›æ›´è¯¦ç»†çš„分æžå¯è§æœ´ç´ 集åˆè®º 。对集åˆè¿›è¡Œä¸¥æ ¼çš„å…¬ç†æŽ¨å¯¼å¯è§å…¬ç†é›†åˆè®º 。
导言
éžæ£å¼çš„,一个集åˆå°±æ˜¯å°†å‡ 个对象适当归类而作为一个整体。集åˆä¸çš„å¯¹è±¡ç§°ä½œå…ƒç´ æˆ–æˆå‘˜ã€‚集åˆä¸çš„å…ƒç´ å¯ä»¥æ˜¯ä»»ä½•东西:数å—ï¼Œäººï¼Œå—æ¯ï¼Œåˆ«çš„集åˆï¼Œç‰ç‰ã€‚集åˆé€šå¸¸è¡¨ç¤ºä¸ºå¤§å†™å—æ¯ A , B , C ,ç‰ç‰ã€‚ä¸¤ä¸ªé›†åˆ A å’Œ B 相ç‰ï¼Œå†™ä½œ A = B ,如果它们有相åŒçš„å…ƒç´ ã€‚
集åˆçš„表示
- 集åˆå¯ä»¥ç”¨æ–‡å—æè¿°ï¼Œæ¯”如:
:A = 大于零的å‰ä¸‰ä¸ªè‡ªç„¶æ•°
:B = 红色ã€ç™½è‰²ã€è“色和绿色
- 集åˆçš„å¦ä¸€ç§è¡¨ç¤ºæ–¹æ³•是在大括å·ä¸åˆ—å‡ºå…¶å…ƒç´ ï¼Œæ¯”å¦‚ï¼š
:C =
:D =
å°½ç®¡ä¸¤ä¸ªé›†åˆæœ‰ä¸åŒçš„表示,它们ä»å¯èƒ½æ˜¯ç›¸åŒçš„。比如:上述集åˆä¸ï¼ŒA = C 而 B = D ï¼Œå› ä¸ºå®ƒä»¬æ£å¥½æœ‰ç›¸åŒçš„å…ƒç´ ã€‚
å…ƒç´ åˆ—å‡ºçš„é¡ºåºä¸åŒï¼Œæˆ–è€…å…ƒç´ åˆ—è¡¨ä¸æœ‰é‡å¤ï¼Œéƒ½æ²¡æœ‰å…³ç³»ã€‚æ¯”å¦‚ï¼šè¿™ä¸‰ä¸ªé›†åˆ ï¼Œ å’Œ 是相åŒçš„ï¼ŒåŒæ ·å› 为它们有相åŒçš„å…ƒç´ ã€‚
- 集åˆåœ¨ä¸ä¸¥æ ¼çš„æ„ä¹‰ä¸‹ä¹Ÿå¯ä»¥é€šè¿‡è‰å›¾æ¥è¡¨ç¤ºï¼Œæ›´å¤šä¿¡æ¯ï¼Œè¯·è§æ–‡æ°å›¾ 。
集åˆçš„å…ƒç´ ä¸ªæ•°
上述æ¯ä¸€ä¸ªé›†åˆéƒ½æœ‰ç¡®å®šçš„å…ƒç´ ä¸ªæ•°ï¼›æ¯”å¦‚ï¼šé›†åˆ A æœ‰ä¸‰ä¸ªå…ƒç´ ï¼Œè€Œé›†åˆ B 有四个。
集åˆå¯ä»¥æ²¡æœ‰å…ƒç´ ã€‚è¿™æ ·çš„é›†åˆå«åšç©ºé›†ï¼Œç”¨ç¬¦å· \varnothing 表示。比如:在2004å¹´ï¼Œé›†åˆ A 是所有ä½åœ¨æœˆçƒä¸Šçš„äººï¼Œå®ƒæ²¡æœ‰å…ƒç´ ï¼Œåˆ™ A = \varnothing ã€‚å°±åƒæ•°å—零,看上去微ä¸è¶³é“,而在数å¦ä¸Šï¼Œç©ºé›†éžå¸¸é‡è¦ã€‚更多信æ¯è¯·çœ‹ç©ºé›† 。
集åˆä¹Ÿå¯ä»¥æœ‰æ— ç©·å¤šä¸ªå…ƒç´ ã€‚æ¯”å¦‚ï¼šè‡ªç„¶æ•°çš„é›†åˆæ˜¯æ— ç©·å¤§çš„ã€‚å…³äºŽæ— ç©·å¤§å’Œé›†åˆçš„大å°çš„æ›´å¤šä¿¡æ¯è¯·è§é›†åˆçš„势 。
å集
å¦‚æžœé›†åˆ A çš„æ‰€æœ‰å…ƒç´ åŒæ—¶éƒ½æ˜¯é›†åˆ B çš„å…ƒç´ ï¼Œåˆ™ A 称作是 B çš„å集,写作 A ⊆ B 。若 A 是 B çš„å集,且 A ä¸ç‰äºŽ B ,则 A 称作是 B 的真å集,写作 A ⊂ B 。
势
举例:
: - æ‰€æœ‰ç”·äººçš„é›†åˆæ˜¯æ‰€æœ‰äººçš„集åˆçš„真å集。
: - æ‰€æœ‰è‡ªç„¶æ•°çš„é›†åˆæ˜¯æ‰€æœ‰æ•´æ•° 的集åˆçš„真å集。
: - ⊂
: - ⊆
空集是所有集åˆçš„å集,而所有集åˆéƒ½æ˜¯å…¶æœ¬èº«çš„å集:
: - \varnothing ⊆ A
: - A ⊆ A
更多信æ¯ï¼Œè¯·è§å集 。
并集
æœ‰å¤šç§æ–¹æ³•é€šè¿‡çŽ°æœ‰é›†åˆæ¥æž„é€ æ–°çš„é›†åˆã€‚
两个集åˆå¯ä»¥ç›¸"åŠ "。A å’Œ B 的并集,写作 A ∪ B ,是或属于 A çš„ã€æˆ–属于 B çš„æ‰€æœ‰å…ƒç´ ç»„æˆçš„集åˆã€‚
å集
举例:
: - ∪ =
: - ∪ =
: - ∪ =
并集的一些基本性质
: - A ∪ B = B ∪ A
: - A ⊆ A ∪ B
: - A ∪ A = A
: - A ∪ \varnothing = A
更多信æ¯ï¼Œè¯·è§å¹¶é›† .
交集
一个新的集åˆä¹Ÿå¯ä»¥é€šè¿‡ä¸¤ä¸ªé›†åˆ"å…±"æœ‰çš„å…ƒç´ æ¥æž„é€ ã€‚A å’Œ B 的交集,写作 A ∩ B ,是既属于 A çš„ã€åˆå±žäºŽ B çš„æ‰€æœ‰å…ƒç´ ç»„æˆçš„集åˆã€‚
è‹¥ A ∩ B = \varnothing ,则 A å’Œ B 称作ä¸ç›¸äº¤ã€‚
并集
举例:
: - ∩ = \varnothing
: - ∩ =
: - ∩ =
交集的一些基本性质
: - A ∩ B = B ∩ A
: - A ∩ B ⊆ A
: - A ∩ A = A
: - A ∩ \varnothing = \varnothing
更多信æ¯ï¼Œè¯·è§äº¤é›† 。
补集
两个集åˆä¹Ÿå¯ä»¥ç›¸"å‡"。A 在 B ä¸çš„相对补集,写作 B − A ,是属于 B çš„ã€ä½†ä¸å±žäºŽ A çš„æ‰€æœ‰å…ƒç´ ç»„æˆçš„集åˆã€‚
åœ¨ç‰¹å®šæƒ…å†µä¸‹ï¼Œæ‰€è®¨è®ºçš„æ‰€æœ‰é›†åˆæ˜¯ä¸€ä¸ªç»™å®šçš„全集 U çš„åé›†ã€‚è¿™æ ·ï¼Œ U − A 称作 A çš„ç»å¯¹è¡¥é›†ï¼Œæˆ–简称补集,写作 A ′。
全集
补集å¯ä»¥çœ‹ä½œä¸¤ä¸ªé›†åˆç›¸å‡ï¼Œæœ‰æ—¶ä¹Ÿç§°ä½œå·®é›†ã€‚
举例:
: - − =
: - − =
: - − = \varnothing
: - è‹¥ U æ˜¯æ•´æ•°é›†ï¼Œåˆ™å¥‡æ•°çš„è¡¥é›†æ˜¯å¶æ•°
补集的基本性质:
: - A ∪ A′ = U
: - A ∩ A′ = \varnothing
: - (A′ )′ = A
: - A − B = A ∩ B′
更多信æ¯ï¼Œè¯·è§è¡¥é›† 。
å…¬ç†é›†åˆè«–
把集åˆçœ‹ä½œâ€œä¸€å †æ±è¥¿â€æœƒå¾—å‡ºæ‰€è¬‚ç½—ç´ æ‚–è®º ã€‚ä¸ºè§£å†³ç½—ç´ æ‚–è®º ,數å¸å®¶æå‡ºå…¬ç†é›†åˆè«– 。在公ç†é›†åˆè®ºä¸ï¼Œé›†åˆæ˜¯ä¸€ä¸ªä¸åŠ å®šä¹‰çš„æ¦‚å¿µã€‚
類
在更深層的公ç†åŒ–æ•°å¦ ä¸ï¼Œé›†åˆä»…仅是一ç§ç‰¹æ®Šçš„ç±» ,是“良性类â€ï¼Œæ˜¯èƒ½å¤Ÿæˆä¸ºå…¶å®ƒç±»çš„å…ƒç´ çš„ç±»ã€‚
类区分为两ç§ï¼šä¸€ç§æ˜¯å¯ä»¥é¡ºåˆ©è¿›è¡Œç±»è¿ç®—的“良性类â€ï¼Œæˆ‘们把这ç§â€œè‰¯æ€§ç±»â€ç§°ä¸ºé›†åˆï¼›å¦ä¸€ç§æ˜¯è¦é™åˆ¶è¿ç®—的“本性类â€ï¼Œå¯¹äºŽæœ¬æ€§ç±»ï¼Œç±»è¿ç®—是并ä¸éƒ½èƒ½è¿›è¡Œçš„。
定义 ç±»A如果满足æ¡ä»¶â€œ\exists B(A\in B) â€ï¼Œåˆ™ç§°ç±»Aä¸ºä¸€ä¸ªé›†åˆ (简称为集),记为Set(A) 。å¦åˆ™ç§°ä¸ºæœ¬æ€§ç±»ã€‚
这说明,一个集åˆå¯ä»¥ä½œä¸ºå…¶å®ƒç±»çš„å…ƒç´ ï¼Œä½†ä¸€ä¸ªæœ¬æ€§ç±»å´ä¸èƒ½æˆä¸ºå…¶å®ƒç±»çš„å…ƒç´ ã€‚å› æ¤å¯ä»¥ç†è§£ä¸ºâ€œæœ¬æ€§ç±»æ˜¯æœ€é«˜å±‚次的类â€ã€‚
å‚è§ï¼šå…¬ç†åŒ–æ•°å¦ -- 类的ç†è®º -- ç½—ç´ å…¬ç†ä½“ç³» -- 集åˆä»£æ•°
category:集åˆè®º
category:æ•°æ®ç»“æž„
ja:集åˆ
ko:ì§‘í•©
顺åºè¡¨ 顺åºè¡¨æ˜¯åœ¨è®¡ç®—æœºå†…å˜ ä¸ä»¥æ•°ç»„ 的形å¼ä¿å˜çš„线性表 ï¼Œæ˜¯æŒ‡ç”¨ä¸€ç»„åœ°å€ è¿žç»çš„å˜å‚¨å•å…ƒ 便¬¡å˜å‚¨æ•°æ®å…ƒç´ 的线性结构。
å˜å‚¨ç»“æž„
/ - 线性表的动æ€åˆ†é…顺åºå˜å‚¨ç»“æž„ - /
#define LIST_INIT_SIZE 10 / - 线性表å˜å‚¨ç©ºé—´çš„åˆå§‹åˆ†é…é‡ - /
#define LIST_INCREMENT 2 / - 线性表å˜å‚¨ç©ºé—´çš„分é…å¢žé‡ - /
typedef struct
SqList;
基本æ“作
/ - 顺åºè¡¨ç¤ºçš„线性表的基本æ“作(12个) - /
void InitList(SqList - L) / - 算法2.3 - /
void DestroyList(SqList - L)
void ClearList(SqList - L)
Status ListEmpty(SqList L)
int ListLength(SqList L)
Status GetElem(SqList L,int i,ElemType - e)
int LocateElem(SqList L,ElemType e,Status( - compare)(ElemType,ElemType))
Status PriorElem(SqList L,ElemType cur_e,ElemType - pre_e)
Status NextElem(SqList L,ElemType cur_e,ElemType - next_e)
Status ListInsert(SqList - L,int i,ElemType e)
Status ListDelete(SqList - L,int i,ElemType - e)
void ListTraverse(SqList L,void( - vi)(ElemType - ))
Category:æ•°æ®ç»“æž„ 链表 é“¾è¡¨æ˜¯åœ¨è®¡ç®—æœºå†…å˜ ä¸ä»¥æŒ‡é’ˆ ä¿æŒäº’相连接的形å¼ä¿å˜çš„线性表 。
使用链表结构å¯ä»¥å…‹æœæ•°ç»„链表需è¦é¢„å…ˆçŸ¥é“æ•°æ®å¤§å°çš„缺点,链表结构å¯ä»¥å……分利用计算机内å˜ç©ºé—´ï¼Œå®žçŽ°çµæ´»çš„内å˜åЍæ€ç®¡ç†ã€‚ä½†æ˜¯é“¾è¡¨å¤±åŽ»äº†æ•°ç»„éšæœºè¯»å–çš„ä¼˜ç‚¹ï¼ŒåŒæ—¶é“¾è¡¨ç”±äºŽå¢žåŠ äº†ç»“ç‚¹çš„æŒ‡é’ˆåŸŸï¼Œç©ºé—´å¼€é”€æ¯”è¾ƒå¤§ã€‚
常用的链表有:å•å‘链表 ã€åŒå‘链表 ã€å¾ªçŽ¯é“¾è¡¨ 。
Category:æ•°æ®ç»“æž„
ja:線形リスト
ko:연결 리스트
éµçµä¸²åˆ— é“¾è¡¨æ˜¯åœ¨è®¡ç®—æœºå†…å˜ ä¸ä»¥æŒ‡é’ˆ ä¿æŒäº’相连接的形å¼ä¿å˜çš„线性表 。
使用链表结构å¯ä»¥å…‹æœæ•°ç»„链表需è¦é¢„å…ˆçŸ¥é“æ•°æ®å¤§å°çš„缺点,链表结构å¯ä»¥å……分利用计算机内å˜ç©ºé—´ï¼Œå®žçŽ°çµæ´»çš„内å˜åЍæ€ç®¡ç†ã€‚ä½†æ˜¯é“¾è¡¨å¤±åŽ»äº†æ•°ç»„éšæœºè¯»å–çš„ä¼˜ç‚¹ï¼ŒåŒæ—¶é“¾è¡¨ç”±äºŽå¢žåŠ äº†ç»“ç‚¹çš„æŒ‡é’ˆåŸŸï¼Œç©ºé—´å¼€é”€æ¯”è¾ƒå¤§ã€‚
常用的链表有:å•å‘链表 ã€åŒå‘链表 ã€å¾ªçŽ¯é“¾è¡¨ 。
Category:æ•°æ®ç»“æž„
ja:線形リスト
ko:연결 리스트
å•链表 å•å‘链表(å•链表)是链表 的一ç§ï¼Œå…¶ç‰¹ç‚¹æ˜¯é“¾è¡¨çš„é“¾æŽ¥æ–¹å‘æ˜¯å•å‘的,对链表的访问è¦é€šè¿‡é¡ºåºè¯»å– 从头部开始。
Image:Link.png
动æ€å•链表
å•å‘链表的数æ®ç»“æž„ å¯ä»¥åˆ†ä¸ºä¸¤éƒ¨åˆ†ï¼šæ•°æ®åŸŸå’ŒæŒ‡é’ˆ 域,数æ®åŸŸå˜å‚¨æ•°æ®ï¼ŒæŒ‡é’ˆåŸŸæŒ‡å‘下一个储å˜èŠ‚ç‚¹çš„åœ°å€ã€‚
/ - 线性表的å•链表å˜å‚¨ç»“æž„ - /
typedef struct LNodeLNode, - LinkList;
/ - 带有头结点的å•链表的基本æ“作(12个) - /
void InitList(LinkList - L)
void DestroyList(LinkList - L)
void ClearList(LinkList L) / - 䏿”¹å˜L - /
Status ListEmpty(LinkList L)
int ListLength(LinkList L)
Status GetElem(LinkList L,int i,ElemType - e) / - 算法2.8 - /
int LocateElem(LinkList L,ElemType e,Status( - compare)(ElemType,ElemType))
Status PriorElem(LinkList L,ElemType cur_e,ElemType - pre_e)
Status NextElem(LinkList L,ElemType cur_e,ElemType - next_e)
Status ListInsert(LinkList L,int i,ElemType e) / - 算法2.9ã€‚ä¸æ”¹å˜L - /
Status ListDelete(LinkList L,int i,ElemType - e) / - 算法2.10ã€‚ä¸æ”¹å˜L - /
void ListTraverse(LinkList L,void( - vi)(ElemType))
/ - vi的形å‚类型为ElemType,与bo2-1.cä¸ç›¸åº”函数的形å‚类型ElemType&ä¸åŒ - /
陿€å•链表
/ - çº¿æ€§è¡¨çš„é™æ€å•链表å˜å‚¨ç»“æž„ - /
#define MAX_SIZE 100 / - 链表的最大长度 - /
typedef struct
component,SLinkList[MAX_SIZE];
/ - 一个数组åªç”Ÿæˆä¸€ä¸ªé™æ€é“¾è¡¨çš„基本æ“作(11个)) - /
#define DestroyList ClearList // DestroyList()å’ŒClearList()çš„æ“ä½œæ˜¯ä¸€æ ·çš„
void InitList(SLinkList L)
void ClearList(SLinkList L)
Status ListEmpty(SLinkList L)
int ListLength(SLinkList L)
Status GetElem(SLinkList L,int i,ElemType - e)
int LocateElem(SLinkList L,ElemType e) / - 算法2.13(有改动) - /
Status PriorElem(SLinkList L,ElemType cur_e,ElemType - pre_e)
Status NextElem(SLinkList L,ElemType cur_e,ElemType - next_e)
Status ListInsert(SLinkList L,int i,ElemType e)
Status ListDelete(SLinkList L,int i,ElemType - e)
void ListTraverse(SLinkList L,void( - vi)(ElemType))
Category:æ•°æ®ç»“æž„ åŒé“¾è¡¨ åŒå‘链表也å«åŒé“¾è¡¨ï¼Œæ˜¯é“¾è¡¨ 的一ç§ï¼Œå®ƒçš„æ¯ä¸ªæ•°æ®ç»“点ä¸éƒ½æœ‰ä¸¤ä¸ªæŒ‡é’ˆï¼Œåˆ†åˆ«æŒ‡å‘直接åŽç»§å’Œç›´æŽ¥å‰é©±ã€‚所以,从åŒå‘链表ä¸çš„ä»»æ„一个结点开始,都å¯ä»¥å¾ˆæ–¹ä¾¿åœ°è®¿é—®å®ƒçš„å‰é©±ç»“点和åŽç»§ç»“ç‚¹ã€‚ä¸€èˆ¬æˆ‘ä»¬éƒ½æž„é€ åŒå‘循环链表 。
/ - 线性表的åŒå‘链表å˜å‚¨ç»“æž„ - /
typedef struct DuLNode
DuLNode, - DuLinkList;
/ - 带头结点的åŒå‘循环链表的基本æ“作(14个) - /
void InitList(DuLinkList - L)
void DestroyList(DuLinkList - L)
void ClearList(DuLinkList L) / - 䏿”¹å˜L - /
Status ListEmpty(DuLinkList L)
int ListLength(DuLinkList L)
Status GetElem(DuLinkList L,int i,ElemType - e)
int LocateElem(DuLinkList L,ElemType e,Status( - compare)(ElemType,ElemType))
Status PriorElem(DuLinkList L,ElemType cur_e,ElemType - pre_e)
Status NextElem(DuLinkList L,ElemType cur_e,ElemType - next_e)
DuLinkList GetElemP(DuLinkList L,int i) / - å¦åŠ - /
Status ListInsert(DuLinkList L,int i,ElemType e)
Status ListDelete(DuLinkList L,int i,ElemType - e)
void ListTraverse(DuLinkList L,void( - visit)(ElemType))
void ListTraverseBack(DuLinkList L,void( - visit)(ElemType))
Category:æ•°æ®ç»“æž„ 散列表 散列表(也å«å“ˆå¸Œè¡¨ï¼‰ï¼Œæ˜¯æ ¹æ®å…³é”®ç 值直接进行访问的数æ®ç»“构,也就是说,它通过把关键ç å€¼æ˜ å°„åˆ°è¡¨ä¸ä¸€ä¸ªä½ç½®æ¥è®¿é—®è®°å½•ï¼Œä»¥åŠ å¿«æŸ¥æ‰¾çš„é€Ÿåº¦ã€‚è¿™ä¸ªæ˜ å°„å‡½æ•°å«åšæ•£åˆ—å‡½æ•° ï¼Œå˜æ”¾è®°å½•的数组å«åšæ•£åˆ—è¡¨ã€‚
若结构ä¸å˜åœ¨å…³é”®å—å’ŒK相ç‰çš„记录,则必定在f(K)çš„å˜å‚¨ä½ç½®ä¸Šã€‚ç”±æ¤ï¼Œä¸éœ€æ¯”较便å¯ç›´æŽ¥å–得所查记录。称这个对应关系f为哈希(Hash)å‡½æ•°ï¼ŒæŒ‰è¿™ä¸ªæ€æƒ³å»ºç«‹çš„表为哈希表。对ä¸åŒçš„关键å—å¯èƒ½å¾—到åŒä¸€å“ˆå¸Œåœ°å€ï¼Œå³key1≠key2,而f(key1)=f(key2),这ç§çŽ°è±¡ç§°å†²çªã€‚具有相åŒå‡½æ•°å€¼çš„关键å—对该哈希函数æ¥è¯´ç§°åšåŒä¹‰è¯ã€‚ç»¼ä¸Šæ‰€è¿°ï¼Œæ ¹æ®å“ˆå¸Œå‡½æ•°H(key)和处ç†å†²çªçš„æ–¹æ³•å°†ä¸€ç»„å…³é”®å—æ˜ 象到一个有é™çš„连ç»çš„地å€é›†ï¼ˆåŒºé—´ï¼‰ä¸Šï¼Œå¹¶ä»¥å…³é”®å—在地å€é›†ä¸çš„“象â€ä½œä¸ºè®°å½•在表ä¸çš„å˜å‚¨ä½ç½®ï¼Œè¿™ç§è¡¨ä¾¿ç§°ä¸ºå“ˆå¸Œè¡¨ï¼Œè¿™ä¸€æ˜ è±¡è¿‡ç¨‹ç§°ä¸ºå“ˆå¸Œé€ è¡¨æˆ–æ•£åˆ—ï¼Œæ‰€å¾—çš„å˜å‚¨ä½ç½®ç§°å“ˆå¸Œåœ°å€æˆ–散列地å€ã€‚若对于关键å—集åˆä¸çš„任一个关键å—,ç»å“ˆå¸Œå‡½æ•°æ˜ 象到地å€é›†åˆä¸ä»»ä½•一个地å€çš„æ¦‚率是相ç‰çš„,则称æ¤ç±»å“ˆå¸Œå‡½æ•°ä¸ºå‡åŒ€(Uniform)哈希函数,这就是使关键å—ç»è¿‡å“ˆå¸Œå‡½æ•°å¾—åˆ°ä¸€ä¸ªâ€œéšæœºçš„地å€â€ï¼Œä»Žè€Œå‡å°‘冲çªã€‚
å¸¸ç”¨çš„æž„é€ å“ˆå¸Œå‡½æ•°çš„æ–¹æ³•
散列函数能使对一个数æ®åºåˆ—çš„è®¿é—®è¿‡ç¨‹æ›´åŠ è¿…é€Ÿæœ‰æ•ˆï¼Œé€šè¿‡æ•£åˆ—å‡½æ•°ï¼Œæ•°æ®å…ƒç´ 将被更快地定ä½Ç
#ç›´æŽ¥å®šå€æ³•:å–关键嗿ˆ–关键å—çš„æŸä¸ªçº¿æ€§å‡½æ•°å€¼ä¸ºå“ˆå¸Œåœ°å€ã€‚å³H(key)=key或H(key) = a•key + b,其ä¸aå’Œb为常数(这ç§å“ˆå¸Œå‡½æ•°å«åšè‡ªèº«å‡½æ•°ï¼‰
#æ•°å—åˆ†æžæ³•
#平方å–䏿³•
#æŠ˜å æ³•
#éšæœºæ•°æ³•
#除留余数法:å–关键å—被æŸä¸ªä¸å¤§äºŽå“ˆå¸Œè¡¨è¡¨é•¿m的数pé™¤åŽæ‰€å¾—的余数为哈希地å€ã€‚å³ H(key) = key MOD p, p<=m。ä¸ä»…å¯ä»¥å¯¹å…³é”®å—ç›´æŽ¥å–æ¨¡ï¼Œä¹Ÿå¯åœ¨æŠ˜å ã€å¹³æ–¹å–ä¸ç‰è¿ç®—之åŽå–模。对p的选择很é‡è¦ï¼Œä¸€èˆ¬å–ç´ æ•°æˆ–m,若p选的ä¸å¥½ï¼Œå®¹æ˜“产生åŒä¹‰è¯ã€‚
处ç†å†²çªçš„æ–¹æ³•
#å¼€æ”¾å®šå€æ³•ï¼›Hi=(H(key) + di) MOD m, i=1,2,…, k(k<=m-1),其ä¸H(key)为哈希函数,m为哈希表长,di为增é‡åºåˆ—ï¼Œå¯æœ‰ä¸‹åˆ—三ç§å–法:
##di=1,2,3,…, m-1ï¼Œç§°çº¿æ€§æŽ¢æµ‹å†æ•£åˆ—ï¼›
##di=12, -12, 22,-22, 32, …, ±k2,(k<=m/2)ç§°äºŒæ¬¡æŽ¢æµ‹å†æ•£åˆ—ï¼›
##di=ä¼ªéšæœºæ•°åºåˆ—ï¼Œç§°ä¼ªéšæœºæŽ¢æµ‹å†æ•£åˆ—。
#å†å“ˆå¸Œæ³•:Hi=RHi(key), i=1,2,…,k RHi凿˜¯ä¸åŒçš„哈希函数,å³åœ¨åŒä¹‰è¯äº§ç”Ÿåœ°å€å†²çªæ—¶è®¡ç®—å¦ä¸€ä¸ªå“ˆå¸Œå‡½æ•°åœ°å€ï¼Œç›´åˆ°å†²çªä¸å†å‘ç”Ÿï¼Œè¿™ç§æ–¹æ³•䏿˜“产生“èšé›†â€ï¼Œä½†å¢žåŠ äº†è®¡ç®—æ—¶é—´ã€‚
#é“¾åœ°å€æ³•(拉链法)
#建立一个公共溢出区
æ’å…¥
åˆ é™¤å…ƒç´
查找的性能分æž
å“ˆå¸Œè¡¨çš„æŸ¥æ‰¾è¿‡ç¨‹åŸºæœ¬ä¸Šå’Œé€ è¡¨è¿‡ç¨‹ç›¸åŒã€‚一些关键ç å¯é€šè¿‡å“ˆå¸Œå‡½æ•°è½¬æ¢çš„地å€ç›´æŽ¥æ‰¾åˆ°ï¼Œå¦ä¸€äº›å…³é”®ç 在哈希函数得到的地å€ä¸Šäº§ç”Ÿäº†å†²çªï¼Œéœ€è¦æŒ‰å¤„ç†å†²çªçš„æ–¹æ³•进行查找。在介ç»çš„三ç§å¤„ç†å†²çªçš„æ–¹æ³•ä¸ï¼Œäº§ç”Ÿå†²çªåŽçš„æŸ¥æ‰¾ä»ç„¶æ˜¯ç»™å®šå€¼ä¸Žå…³é”®ç 进行比较的过程。所以,对哈希表查找效率的é‡åº¦ï¼Œä¾ç„¶ç”¨å¹³å‡æŸ¥æ‰¾é•¿åº¦æ¥è¡¡é‡ã€‚
查找过程ä¸ï¼Œå…³é”®ç 的比较次数,å–决于产生冲çªçš„多少,产生的冲çªå°‘,查找效率就高,产生的冲çªå¤šï¼ŒæŸ¥æ‰¾æ•ˆçŽ‡å°±ä½Žã€‚å› æ¤ï¼Œå½±å“产生冲çªå¤šå°‘çš„å› ç´ ï¼Œä¹Ÿå°±æ˜¯å½±å“æŸ¥æ‰¾æ•ˆçŽ‡çš„å› ç´ ã€‚å½±å“产生冲çªå¤šå°‘æœ‰ä»¥ä¸‹ä¸‰ä¸ªå› ç´ ï¼š
#哈希函数是å¦å‡åŒ€ï¼›
#处ç†å†²çªçš„æ–¹æ³•ï¼›
#å“ˆå¸Œè¡¨çš„è£…å¡«å› å。
å“ˆå¸Œè¡¨çš„è£…å¡«å› å定义为:α= 填入表ä¸çš„å…ƒç´ ä¸ªæ•° / 哈希表的长度
Î±æ˜¯å“ˆå¸Œè¡¨è£…æ»¡ç¨‹åº¦çš„æ ‡å¿—å› å。由于表长是定值,α与“填入表ä¸çš„å…ƒç´ ä¸ªæ•°â€æˆæ£æ¯”,所以,α越大,填入表ä¸çš„å…ƒç´ è¾ƒå¤šï¼Œäº§ç”Ÿå†²çªçš„å¯èƒ½æ€§å°±è¶Šå¤§ï¼›Î±è¶Šå°ï¼Œå¡«å…¥è¡¨ä¸çš„å…ƒç´ è¾ƒå°‘ï¼Œäº§ç”Ÿå†²çªçš„å¯èƒ½æ€§å°±è¶Šå°ã€‚
å®žé™…ä¸Šï¼Œå“ˆå¸Œè¡¨çš„å¹³å‡æŸ¥æ‰¾é•¿åº¦æ˜¯è£…å¡«å› åÎ±çš„å‡½æ•°ï¼Œåªæ˜¯ä¸åŒå¤„ç†å†²çªçš„æ–¹æ³•有ä¸åŒçš„å‡½æ•°ã€‚ä»¥ä¸‹ç»™å‡ºå‡ ç§ä¸åŒå¤„ç†å†²çªæ–¹æ³•çš„å¹³å‡æŸ¥æ‰¾é•¿åº¦ï¼š
å‚è§ï¼š
- æ•°æ®ç»“æž„
category:æ•°æ®ç»“æž„
ja:ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ル
哈希表 散列表(也å«å“ˆå¸Œè¡¨ï¼‰ï¼Œæ˜¯æ ¹æ®å…³é”®ç 值直接进行访问的数æ®ç»“构,也就是说,它通过把关键ç å€¼æ˜ å°„åˆ°è¡¨ä¸ä¸€ä¸ªä½ç½®æ¥è®¿é—®è®°å½•ï¼Œä»¥åŠ å¿«æŸ¥æ‰¾çš„é€Ÿåº¦ã€‚è¿™ä¸ªæ˜ å°„å‡½æ•°å«åšæ•£åˆ—å‡½æ•° ï¼Œå˜æ”¾è®°å½•的数组å«åšæ•£åˆ—è¡¨ã€‚
若结构ä¸å˜åœ¨å…³é”®å—å’ŒK相ç‰çš„记录,则必定在f(K)çš„å˜å‚¨ä½ç½®ä¸Šã€‚ç”±æ¤ï¼Œä¸éœ€æ¯”较便å¯ç›´æŽ¥å–得所查记录。称这个对应关系f为哈希(Hash)å‡½æ•°ï¼ŒæŒ‰è¿™ä¸ªæ€æƒ³å»ºç«‹çš„表为哈希表。对ä¸åŒçš„关键å—å¯èƒ½å¾—到åŒä¸€å“ˆå¸Œåœ°å€ï¼Œå³key1≠key2,而f(key1)=f(key2),这ç§çŽ°è±¡ç§°å†²çªã€‚具有相åŒå‡½æ•°å€¼çš„关键å—对该哈希函数æ¥è¯´ç§°åšåŒä¹‰è¯ã€‚ç»¼ä¸Šæ‰€è¿°ï¼Œæ ¹æ®å“ˆå¸Œå‡½æ•°H(key)和处ç†å†²çªçš„æ–¹æ³•å°†ä¸€ç»„å…³é”®å—æ˜ 象到一个有é™çš„连ç»çš„地å€é›†ï¼ˆåŒºé—´ï¼‰ä¸Šï¼Œå¹¶ä»¥å…³é”®å—在地å€é›†ä¸çš„“象â€ä½œä¸ºè®°å½•在表ä¸çš„å˜å‚¨ä½ç½®ï¼Œè¿™ç§è¡¨ä¾¿ç§°ä¸ºå“ˆå¸Œè¡¨ï¼Œè¿™ä¸€æ˜ è±¡è¿‡ç¨‹ç§°ä¸ºå“ˆå¸Œé€ è¡¨æˆ–æ•£åˆ—ï¼Œæ‰€å¾—çš„å˜å‚¨ä½ç½®ç§°å“ˆå¸Œåœ°å€æˆ–散列地å€ã€‚若对于关键å—集åˆä¸çš„任一个关键å—,ç»å“ˆå¸Œå‡½æ•°æ˜ 象到地å€é›†åˆä¸ä»»ä½•一个地å€çš„æ¦‚率是相ç‰çš„,则称æ¤ç±»å“ˆå¸Œå‡½æ•°ä¸ºå‡åŒ€(Uniform)哈希函数,这就是使关键å—ç»è¿‡å“ˆå¸Œå‡½æ•°å¾—åˆ°ä¸€ä¸ªâ€œéšæœºçš„地å€â€ï¼Œä»Žè€Œå‡å°‘冲çªã€‚
å¸¸ç”¨çš„æž„é€ å“ˆå¸Œå‡½æ•°çš„æ–¹æ³•
散列函数能使对一个数æ®åºåˆ—çš„è®¿é—®è¿‡ç¨‹æ›´åŠ è¿…é€Ÿæœ‰æ•ˆï¼Œé€šè¿‡æ•£åˆ—å‡½æ•°ï¼Œæ•°æ®å…ƒç´ 将被更快地定ä½Ç
#ç›´æŽ¥å®šå€æ³•:å–关键嗿ˆ–关键å—çš„æŸä¸ªçº¿æ€§å‡½æ•°å€¼ä¸ºå“ˆå¸Œåœ°å€ã€‚å³H(key)=key或H(key) = a•key + b,其ä¸aå’Œb为常数(这ç§å“ˆå¸Œå‡½æ•°å«åšè‡ªèº«å‡½æ•°ï¼‰
#æ•°å—åˆ†æžæ³•
#平方å–䏿³•
#æŠ˜å æ³•
#éšæœºæ•°æ³•
#除留余数法:å–关键å—被æŸä¸ªä¸å¤§äºŽå“ˆå¸Œè¡¨è¡¨é•¿m的数pé™¤åŽæ‰€å¾—的余数为哈希地å€ã€‚å³ H(key) = key MOD p, p<=m。ä¸ä»…å¯ä»¥å¯¹å…³é”®å—ç›´æŽ¥å–æ¨¡ï¼Œä¹Ÿå¯åœ¨æŠ˜å ã€å¹³æ–¹å–ä¸ç‰è¿ç®—之åŽå–模。对p的选择很é‡è¦ï¼Œä¸€èˆ¬å–ç´ æ•°æˆ–m,若p选的ä¸å¥½ï¼Œå®¹æ˜“产生åŒä¹‰è¯ã€‚
处ç†å†²çªçš„æ–¹æ³•
#å¼€æ”¾å®šå€æ³•ï¼›Hi=(H(key) + di) MOD m, i=1,2,…, k(k<=m-1),其ä¸H(key)为哈希函数,m为哈希表长,di为增é‡åºåˆ—ï¼Œå¯æœ‰ä¸‹åˆ—三ç§å–法:
##di=1,2,3,…, m-1ï¼Œç§°çº¿æ€§æŽ¢æµ‹å†æ•£åˆ—ï¼›
##di=12, -12, 22,-22, 32, …, ±k2,(k<=m/2)ç§°äºŒæ¬¡æŽ¢æµ‹å†æ•£åˆ—ï¼›
##di=ä¼ªéšæœºæ•°åºåˆ—ï¼Œç§°ä¼ªéšæœºæŽ¢æµ‹å†æ•£åˆ—。
#å†å“ˆå¸Œæ³•:Hi=RHi(key), i=1,2,…,k RHi凿˜¯ä¸åŒçš„哈希函数,å³åœ¨åŒä¹‰è¯äº§ç”Ÿåœ°å€å†²çªæ—¶è®¡ç®—å¦ä¸€ä¸ªå“ˆå¸Œå‡½æ•°åœ°å€ï¼Œç›´åˆ°å†²çªä¸å†å‘ç”Ÿï¼Œè¿™ç§æ–¹æ³•䏿˜“产生“èšé›†â€ï¼Œä½†å¢žåŠ äº†è®¡ç®—æ—¶é—´ã€‚
#é“¾åœ°å€æ³•(拉链法)
#建立一个公共溢出区
æ’å…¥
åˆ é™¤å…ƒç´
查找的性能分æž
å“ˆå¸Œè¡¨çš„æŸ¥æ‰¾è¿‡ç¨‹åŸºæœ¬ä¸Šå’Œé€ è¡¨è¿‡ç¨‹ç›¸åŒã€‚一些关键ç å¯é€šè¿‡å“ˆå¸Œå‡½æ•°è½¬æ¢çš„地å€ç›´æŽ¥æ‰¾åˆ°ï¼Œå¦ä¸€äº›å…³é”®ç 在哈希函数得到的地å€ä¸Šäº§ç”Ÿäº†å†²çªï¼Œéœ€è¦æŒ‰å¤„ç†å†²çªçš„æ–¹æ³•进行查找。在介ç»çš„三ç§å¤„ç†å†²çªçš„æ–¹æ³•ä¸ï¼Œäº§ç”Ÿå†²çªåŽçš„æŸ¥æ‰¾ä»ç„¶æ˜¯ç»™å®šå€¼ä¸Žå…³é”®ç 进行比较的过程。所以,对哈希表查找效率的é‡åº¦ï¼Œä¾ç„¶ç”¨å¹³å‡æŸ¥æ‰¾é•¿åº¦æ¥è¡¡é‡ã€‚
查找过程ä¸ï¼Œå…³é”®ç 的比较次数,å–决于产生冲çªçš„多少,产生的冲çªå°‘,查找效率就高,产生的冲çªå¤šï¼ŒæŸ¥æ‰¾æ•ˆçŽ‡å°±ä½Žã€‚å› æ¤ï¼Œå½±å“产生冲çªå¤šå°‘çš„å› ç´ ï¼Œä¹Ÿå°±æ˜¯å½±å“æŸ¥æ‰¾æ•ˆçŽ‡çš„å› ç´ ã€‚å½±å“产生冲çªå¤šå°‘æœ‰ä»¥ä¸‹ä¸‰ä¸ªå› ç´ ï¼š
#哈希函数是å¦å‡åŒ€ï¼›
#处ç†å†²çªçš„æ–¹æ³•ï¼›
#å“ˆå¸Œè¡¨çš„è£…å¡«å› å。
å“ˆå¸Œè¡¨çš„è£…å¡«å› å定义为:α= 填入表ä¸çš„å…ƒç´ ä¸ªæ•° / 哈希表的长度
Î±æ˜¯å“ˆå¸Œè¡¨è£…æ»¡ç¨‹åº¦çš„æ ‡å¿—å› å。由于表长是定值,α与“填入表ä¸çš„å…ƒç´ ä¸ªæ•°â€æˆæ£æ¯”,所以,α越大,填入表ä¸çš„å…ƒç´ è¾ƒå¤šï¼Œäº§ç”Ÿå†²çªçš„å¯èƒ½æ€§å°±è¶Šå¤§ï¼›Î±è¶Šå°ï¼Œå¡«å…¥è¡¨ä¸çš„å…ƒç´ è¾ƒå°‘ï¼Œäº§ç”Ÿå†²çªçš„å¯èƒ½æ€§å°±è¶Šå°ã€‚
å®žé™…ä¸Šï¼Œå“ˆå¸Œè¡¨çš„å¹³å‡æŸ¥æ‰¾é•¿åº¦æ˜¯è£…å¡«å› åÎ±çš„å‡½æ•°ï¼Œåªæ˜¯ä¸åŒå¤„ç†å†²çªçš„æ–¹æ³•有ä¸åŒçš„å‡½æ•°ã€‚ä»¥ä¸‹ç»™å‡ºå‡ ç§ä¸åŒå¤„ç†å†²çªæ–¹æ³•çš„å¹³å‡æŸ¥æ‰¾é•¿åº¦ï¼š
å‚è§ï¼š
- æ•°æ®ç»“æž„
category:æ•°æ®ç»“æž„
ja:ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ル
Iwangorod Iwangorod (russisch Ивангород; estnisch Jaanilinn ) ist eine Stadt in der Oblast Leningrad in Russland , 159 km westlich von Sankt Petersburg .
Geografie
Iwangorod hat 11.200 Einwohner (2004) und eine Ausdehnung von 7,7km².
Die Stadt liegt am rechten Ufer der Narva , die hier die Grenze zwischen Russland und Estland bildet. Von 1920 – 1940 gehörte sie unter dem Namen Jaanilinn zu Estland.
Während der Sowjetzeit waren Narva und Iwangorod Zwillingsstädte , die in verschiedenen Unionsrepublik en lagen. Heute verläuft hier die Außengrenze der Europäischen Union .
Seit 1954 hat Iwangorod Stadtrecht.
Sehenswürdigkeit
1954
Die bedeutendste Sehenswürdigkeit ist die Festung Iwangorod aus der Zeit Iwans III. , die am Ufer der Narva der estnischen Hermannsfeste gegenüberliegt.
Verkehr
Die Stadt liegt an der Eisenbahnstrecke Tallinn – Sankt Petersburg.
Weblinks
- [http://www.ivangorod.ru/ offizielle Webseite der Stadt] (russisch)
- [http://www.uni-tuebingen.de/egoinfo/beispstadt.html#3 Geteilte Grenzstädte]
- [http://www.berlinonline.de/berliner-zeitung/archiv/.bin/dump.fcgi/2004/0428/blickpunkt/0001/ Berliner Zeitung vom 28. April 2004]
Kategorie:Ort in Russland
ko:ì´ë°˜ê³ 로트
narty we francji encyklopedia od¿ywki hoteles en Praga appartamenti bruxelles
:: RELATED NEWS ::
Toongabbie
Toongabbie is a suburb in Sydney , Australia , and is notable for being one of the the third settlement set up after the British occupation of Australia in 1788 . Toongabbie is situated approximately 26km (16 miles) west of the central business district of Sydney.
Toongabbie is roughly divided by the main western railway line over two suburb in the south of Sydney , in the state of New South Wales , Australia . It is located in the Sutherland Shire , and contains some industrial areas along the main Taren Point Road.
External links
Category:Incomplete Sydney suburbs
suburb of Sydney , in the state of New South Wales , Australia .
Tamarama has a small but perfectly formed ocean beach immediately south of the world famous Bondi Beach . Known affectionately as Glamarama by the locals, it is a beach where the seriously beautiful come to sunbathe and swim. Because of its deep water, small size and easterly