第4周项目2 建设“单链表”算法库

来源:互联网 发布:vx软件 编辑:程序博客网 时间:2024/05/20 19:29

问题及代码:

/*文件名称:main.cpp linklist.h linklist.cpp
 *作者:郑孚嘉
 *问题描述:
 算法库包括两个文件:
 头文件:linklist.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明;
 源文件:linklist.cpp,包含实现各种算法的函数的定义
 请采用程序的多文件组织形式,建立如上的两个文件,另外再建立一个源文件(如main.cpp),编制main函数,完成相关的测试工作。
 测试工作可以采用“渐进”的思路,每次涉及的函数应该尽可能少。
 */

1)linklist.h

#include <stdio.h>#include <malloc.h>typedef int ElemType;typedef struct LNode{    ElemType data;    struct LNode *next;}LinkList;void InitList(LinkList *&L);                   //初始化链表void DestroyList(LinkList *&L);                //销毁链表bool ListInsert(LinkList *&L,int i,ElemType e);//插入数据void DispList(LinkList *L);                    //输出节点数据

2)linklist.cpp

#include "linklist.h"void InitList(LinkList *&L){    L=(LinkList *)malloc(sizeof(LinkList));    L->next=NULL;}void DestroyList(LinkList *&L){    LinkList *pre=L,*p=L->next;    while(p!=NULL)    {        free(pre);        pre=p;        p=pre->next;    }    free(pre);}bool ListInsert(LinkList *&L,int i,ElemType e){    int j=0;    LinkList *p=L,*s;    while(j<i-1&&p!=NULL)    {        j++;        p=p->next;    }    if(p==NULL)    {        return false;    }    else    {        s=(LinkList *)malloc(sizeof(LinkList));        s->data=e;        s->next=p->next;        p->next=s;        return true;    }}void DispList(LinkList *L){    LinkList *p=L->next;    while(p!=NULL)    {        printf("%d ",p->data);        p=p->next;    }    printf("\n");}

3)main.cpp

#include "linklist.h"int main(){    LinkList *L;    InitList(L);    ListInsert(L, 1, 15);    ListInsert(L, 1, 10);    ListInsert(L, 1, 5);    ListInsert(L, 1, 20);    DispList(L);    DestroyList(L);    return 0;}


运行结果:

 

知识点总结:

如同建立顺序表算法库一样,把链表的初始化,销毁,插入数据和输出数据的函数写到linklist.cpp中,通过main函数测试。

0 0