第四周项目4——建设双链表算法库

来源:互联网 发布:java图形界面开发框架 编辑:程序博客网 时间:2024/05/23 02:24
/*  
* Copyright (c)2016,烟台大学计算机与控制工程学院  
* All rights reserved.  
* 文件名称:项目4.cpp  
* 作    者:孟晔  
* 完成日期:2016年9月23日  
* 版 本 号:v1.0   
*问题描述:算法库包括两个文件:  
  l头文件:dlinklist.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明;  
  l源文件:dlinklist.cpp,包含实现各种算法的函数的定义  
  请采用程序的多文件组织形式,建立如上的两个文件,另外再建立一个源文件(如main.cpp),编制main函数,完成相关的测试工作。 
*输入描述:无    
*程序输出:新建的双链表。   

*/

1.头文件:dlinklist.h,包含定义双链表数据结构的代码、宏定义、要实现算法的函数的声明;

<code class="hljs vala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#ifndef DLINKLIST_H_INCLUDED</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#define DLINKLIST_H_INCLUDED</span>typedef <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> ElemType;typedef <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">struct</span> DNode        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//定义双链表结点类型</span>{    ElemType data;    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">struct</span> DNode *prior;    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//指向前驱结点</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">struct</span> DNode *next;     <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//指向后继结点</span>} DLinkList;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> CreateListF(DLinkList *&L,ElemType a[],<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> n);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//头插法建双链表</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> CreateListR(DLinkList *&L,ElemType a[],<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> n);<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//尾插法建双链表</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> InitList(DLinkList *&L); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//初始化双链表</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> DestroyList(DLinkList *&L); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//销毁双链表</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> ListEmpty(DLinkList *L); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//判断链表是否为空</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> ListLength(DLinkList *L); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//求链表的长度</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> DispList(DLinkList *L); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//输出链表</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> GetElem(DLinkList *L,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i,ElemType &e); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//获取节点的值</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> LocateElem(DLinkList *L,ElemType e); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//查找一个节点</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> ListInsert(DLinkList *&L,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i,ElemType e) ;<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//插入一个节点</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">bool</span> ListDelete(DLinkList *&L,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i,ElemType &e); <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//删除一个节点</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#endif // DLINKLIST_H_INCLUDED</span></code>

2.源文件:linklist.cpp,包含实现各种算法的函数的定义

<code class="hljs perl has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#include <stdio.h></span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#include <malloc.h></span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#include "dlinklist.h"</span>void CreateListF(DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*&</span>L,ElemType a[],<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> n)//头插法建双链表{    DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*s</span>;    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i;    L=(DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*)</span>malloc(sizeof(DLinkList));   <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span>创建头结点    L->prior=L-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>=NULL;    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (i=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; i<n; i++)    {        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>=(DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*)</span>malloc(sizeof(DLinkList));<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span>创建新结点        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>->data=a[i];        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>=L-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>;            <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span>将<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*s</span>插在原开始结点之前,头结点之后        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (L-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>!=NULL) L-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>->prior=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>;        L-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>;        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>->prior=L;    }}void CreateListR(DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*&</span>L,ElemType a[],<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> n)//尾插法建双链表{    DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*s</span>,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*r</span>;    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i;    L=(DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*)</span>malloc(sizeof(DLinkList));   <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span>创建头结点    L->prior=L-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>=NULL;    r=L;                    <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//r</span>始终指向终端结点,开始时指向头结点    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (i=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; i<n; i++)    {        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>=(DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*)</span>malloc(sizeof(DLinkList));<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span>创建新结点        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>->data=a[i];        r-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>;        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>->prior=r; <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span>将<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*s</span>插入<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*r</span>之后        r=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>;    }    r-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>=NULL;           <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span>终端结点<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>域置为NULL}void InitList(DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*&</span>L){    L=(DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*)</span>malloc(sizeof(DLinkList));   <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span>创建头结点    L->prior=L-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>=NULL;}void DestroyList(DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*&</span>L){    DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*p</span>=L,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*q</span>=p-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>;    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">q</span>!=NULL)    {        free(p);        p=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">q</span>;        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">q</span>=p-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>;    }    free(p);}bool ListEmpty(DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*L</span>){    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>(L-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>==NULL);}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> ListLength(DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*L</span>){    DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*p</span>=L;    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span> (p-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>!=NULL)    {        i++;        p=p-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>;    }    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>(i);}void DispList(DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*L</span>){    DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*p</span>=L-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>;    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span> (p!=NULL)    {        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">printf</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">%d</span> "</span>,p->data);        p=p-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>;    }    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">printf</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"\n"</span>);}bool GetElem(DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*L</span>,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i,ElemType &e){    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> j=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;    DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*p</span>=L;    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span> (j<i && p!=NULL)    {        j++;        p=p-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>;    }    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (p==NULL)        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> false;    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>    {        e=p->data;        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> true;    }}<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> LocateElem(DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*L</span>,ElemType e){    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> n=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;    DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*p</span>=L-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>;    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span> (p!=NULL && p->data!=e)    {        n++;        p=p-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>;    }    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (p==NULL)        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>);    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span>(n);}bool ListInsert(DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*&</span>L,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i,ElemType e){    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> j=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;    DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*p</span>=L,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*s</span>;    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span> (j<i-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> && p!=NULL)    {        j++;        p=p-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>;    }    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (p==NULL)    //未找到第i-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>个结点        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> false;    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>            //找到第i-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>个结点<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*p</span>    {        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>=(DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*)</span>malloc(sizeof(DLinkList));   <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span>创建新结点<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*s</span>        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>->data=e;        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>=p-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>;        <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span>将<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*s</span>插入到<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*p</span>之后        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (p-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>!=NULL) p-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>->prior=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>;        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>->prior=p;        p-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>;        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> true;    }}bool ListDelete(DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*&</span>L,<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i,ElemType &e){    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> j=<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;    DLinkList <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*p</span>=L,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*q</span>;    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span> (j<i-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> && p!=NULL)    {        j++;        p=p-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>;    }    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (p==NULL)                //未找到第i-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>个结点        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> false;    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span>                        //找到第i-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>个结点<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*p</span>    {        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">q</span>=p-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>;              <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//q</span>指向要删除的结点        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">q</span>==NULL)            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> false;       <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span>不存在第i个结点        e=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">q</span>->data;        p-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>=<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">q</span>-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>;        <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span>从单链表中删除<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*q</span>结点        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (p-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>!=NULL) p-><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">next</span>->prior=p;        free(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">q</span>);                <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span>释放<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*q</span>结点        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> true;    }}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li><li style="box-sizing: border-box; padding: 0px 5px;">94</li><li style="box-sizing: border-box; padding: 0px 5px;">95</li><li style="box-sizing: border-box; padding: 0px 5px;">96</li><li style="box-sizing: border-box; padding: 0px 5px;">97</li><li style="box-sizing: border-box; padding: 0px 5px;">98</li><li style="box-sizing: border-box; padding: 0px 5px;">99</li><li style="box-sizing: border-box; padding: 0px 5px;">100</li><li style="box-sizing: border-box; padding: 0px 5px;">101</li><li style="box-sizing: border-box; padding: 0px 5px;">102</li><li style="box-sizing: border-box; padding: 0px 5px;">103</li><li style="box-sizing: border-box; padding: 0px 5px;">104</li><li style="box-sizing: border-box; padding: 0px 5px;">105</li><li style="box-sizing: border-box; padding: 0px 5px;">106</li><li style="box-sizing: border-box; padding: 0px 5px;">107</li><li style="box-sizing: border-box; padding: 0px 5px;">108</li><li style="box-sizing: border-box; padding: 0px 5px;">109</li><li style="box-sizing: border-box; padding: 0px 5px;">110</li><li style="box-sizing: border-box; padding: 0px 5px;">111</li><li style="box-sizing: border-box; padding: 0px 5px;">112</li><li style="box-sizing: border-box; padding: 0px 5px;">113</li><li style="box-sizing: border-box; padding: 0px 5px;">114</li><li style="box-sizing: border-box; padding: 0px 5px;">115</li><li style="box-sizing: border-box; padding: 0px 5px;">116</li><li style="box-sizing: border-box; padding: 0px 5px;">117</li><li style="box-sizing: border-box; padding: 0px 5px;">118</li><li style="box-sizing: border-box; padding: 0px 5px;">119</li><li style="box-sizing: border-box; padding: 0px 5px;">120</li><li style="box-sizing: border-box; padding: 0px 5px;">121</li><li style="box-sizing: border-box; padding: 0px 5px;">122</li><li style="box-sizing: border-box; padding: 0px 5px;">123</li><li style="box-sizing: border-box; padding: 0px 5px;">124</li><li style="box-sizing: border-box; padding: 0px 5px;">125</li><li style="box-sizing: border-box; padding: 0px 5px;">126</li><li style="box-sizing: border-box; padding: 0px 5px;">127</li><li style="box-sizing: border-box; padding: 0px 5px;">128</li><li style="box-sizing: border-box; padding: 0px 5px;">129</li><li style="box-sizing: border-box; padding: 0px 5px;">130</li><li style="box-sizing: border-box; padding: 0px 5px;">131</li><li style="box-sizing: border-box; padding: 0px 5px;">132</li><li style="box-sizing: border-box; padding: 0px 5px;">133</li><li style="box-sizing: border-box; padding: 0px 5px;">134</li><li style="box-sizing: border-box; padding: 0px 5px;">135</li><li style="box-sizing: border-box; padding: 0px 5px;">136</li><li style="box-sizing: border-box; padding: 0px 5px;">137</li><li style="box-sizing: border-box; padding: 0px 5px;">138</li><li style="box-sizing: border-box; padding: 0px 5px;">139</li><li style="box-sizing: border-box; padding: 0px 5px;">140</li><li style="box-sizing: border-box; padding: 0px 5px;">141</li><li style="box-sizing: border-box; padding: 0px 5px;">142</li><li style="box-sizing: border-box; padding: 0px 5px;">143</li><li style="box-sizing: border-box; padding: 0px 5px;">144</li><li style="box-sizing: border-box; padding: 0px 5px;">145</li><li style="box-sizing: border-box; padding: 0px 5px;">146</li><li style="box-sizing: border-box; padding: 0px 5px;">147</li><li style="box-sizing: border-box; padding: 0px 5px;">148</li><li style="box-sizing: border-box; padding: 0px 5px;">149</li><li style="box-sizing: border-box; padding: 0px 5px;">150</li><li style="box-sizing: border-box; padding: 0px 5px;">151</li><li style="box-sizing: border-box; padding: 0px 5px;">152</li><li style="box-sizing: border-box; padding: 0px 5px;">153</li><li style="box-sizing: border-box; padding: 0px 5px;">154</li><li style="box-sizing: border-box; padding: 0px 5px;">155</li></ul>

  3.在建立算法库过程中,为了完成测试,再同一项目(project)中建立一个源文件(如main.cpp),编制main函数,完成相关的测试工作。 
  测试工作可以采用“渐进”的思路,每次涉及的函数应该尽可能少。 
  例如,下面的设计,测试了部分函数:

<code class="hljs autohotkey has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">#include <stdio.h>#include <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"dlinklist.h"</span>int main(){    DLinkList *<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">A</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>    ElemType <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">a</span>[]= {<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">9</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span> ,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>}<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>    InitList(<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">A</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>    CreateListF(<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">A</span>, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">a</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>    printf(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"length: %d\n"</span>, ListLength(<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">A</span>))<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>    ListInsert(<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">A</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">12</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>    printf(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"After Insert: "</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>    DispList(<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">A</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>    DestroyList(<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">A</span>)<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">;</span>}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li></ul><div class="save_code tracking-ad" data-mod="popu_249" style="box-sizing: border-box; position: absolute; height: 60px; right: 30px; top: 5px; color: rgb(255, 255, 255); cursor: pointer; z-index: 2;"><a target=_blank style="box-sizing: border-box; color: rgb(12, 137, 207);"><img src="http://static.blog.csdn.net/images/save_snippets.png" style="border: none; box-sizing: border-box;" alt="" /></a></div>

   

知识点总结:

   通过多文件组织建立双链表的算法库。


   


0 0
原创粉丝点击