⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chapter3_3.htm

📁 介绍各种数据结构的讲义
💻 HTM
📖 第 1 页 / 共 2 页
字号:
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;if 
            p=O then&nbsp;&nbsp;&nbsp; (在第一个位置插入)</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp; 
            begin</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp; 
            if move(available,L) then SPACE[L].element:=x</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            else error;</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp;&nbsp; 
            &nbsp;end</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            else&nbsp;&nbsp; {不在第一个位置插入}</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            if&nbsp; move(available,SPACE[p].next)</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            then SPACE[SPACE[p].next].element:=x</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            else error</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">end;
        </td>
      </tr>
    </table>
  </center>
</div>
<blockquote> 
  <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;</p>
</blockquote>
<p style="text-autospace: none" align="left">&nbsp;&nbsp;&nbsp; 由于我们没有使用表头单元,所以必须单独处理在第一个位置插入的情形。另外,上述过程中用到了一个函数move(p,q),其功能是从某一链表中将游标p所指的单元C摘除,并将这个单元C插入到另一链表中游标q所指的单元之前,成功则返回true。我们可以先将q改为指向单元C,然后再将p改为指向单元C的下一单元,最后再将C中的游标改为指向q原来所指的单元即可。这个游标的修改过程如图5所示。</p>
<blockquote> 
    <p style="text-autospace: none" align="center"><img border="0" src="images/img8.gif" width="453" height="237"></p>
</blockquote>
<p style="text-autospace: none" align="center">图5&nbsp; 两个链表之间的单元转移</p>
<p style="text-autospace: none" align="left">&nbsp;&nbsp;&nbsp; 图5中的实线和虚线分别表示单元转移前后的游标。当单元C存在时,函数move取值为true,并施行单元C的转移;当单元C不存在时,函数move取值为false。</p>
<div align="center"> 
  <center>
    <table border="0" width="90%" bgcolor="#E0E0E0" cellpadding="5">
      <tr> 
        <td width="100%"> 
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5"><b>function</b> 
            move(var p,q;integer):boolean;</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">var</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp; 
            temp:integer;</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">begin</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp; 
            if p=0 then return(false)</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            e1se</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            begin</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            temp:=q;</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            q:=p;</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            p:=SPACE[p].next;</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            SPACE[q].next:=temp;</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            return(true);</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            end</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">end;
        </td>
      </tr>
    </table>
  </center>
</div>
<p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp; 
  要从表中删除位置p的元素,可以将L中位置p所指示的那个单元摘除,并将它插入表available的头一个位置备用。</p>
<div align="center"> 
  <center>
    <table border="0" width="90%" bgcolor="#E0E0E0" cellpadding="5">
      <tr> 
        <td width="100%"> 
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5"><b>procedrue</b> 
            Delete(p:TPosition;var L:TList);</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">begin</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">if 
            p=O then move(L,available)</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            else move(SPACE[p]^.next,available)</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">end;
        </td>
      </tr>
    </table>
  </center>
</div>
<p style="text-autospace: none" align="left">&nbsp;&nbsp;&nbsp; 与单链表中的情形类似,为要删除表L中的一个元素x,先要找到x在表L中的位置。这可以用下面的函数Locate来实现。在表L中找到第一个与x相同的元素时,Locate返回x所在单元的位置,否则返回表尾位置。</p>
<div align="center"> 
  <center>
    <table border="0" width="90%" bgcolor="#E0E0E0" cellpadding="5">
      <tr> 
        <td width="100%"> 
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5"><b>function</b> 
            Locate (x:TElement;L:TList):TPosition;</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">Var</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp; 
            p:TPosition;</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">begin</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp; 
            p:=L;</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp; 
            if p=0 then error('List is empty.');</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp; 
            if SPACE[p].element=x then return(0);</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp; 
            while SPACE[P].next&lt;&gt;0 do</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp; 
            &nbsp;&nbsp;if SPACE[SPACE[P].next].element=x then return(p)</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp; 
            p:=SPACE[P].next;</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">&nbsp;&nbsp;&nbsp;return(p);</p>
          <p align="left" style="text-align: left; text-autospace: none; margin-top: 5; margin-bottom: 5">end;
        </td>
      </tr>
    </table>
  </center>
</div>
<p align="left" style="text-align:left;
text-autospace:none">&nbsp;&nbsp;&nbsp; 由于我们是用游标来模拟指针的,上述各运算的复杂性分析与单链表中的情形是类似的。另外,上述程序中都省略了检查错误的语句。</p>
<!-- #EndEditable --> 
</div>
<script src='../../../lib/footer.js'>
</script> 
</body> 
<!-- #EndTemplate --></html> 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -