通过对于单链表的学习,我们开始建设自己的算法库,这个算法库包括初始化单链表函数、插入数据函数、销毁单链表函数。由于学习了多文件系统,为了让算法库更加简单明了,我采用了多文件系统的构建方式,将整个算法库分为头文件(包含函数、结构体声明以及包含库)以及自定义函数源文件。
头文件如下:
/*
Copyright (c) 2015,烟台大学计算机与控制工程学院
All righs reserved
文件名称:test.cpp
作者: 李哲
完成日期:2015年10月3日
问题描述:建设单链表算法库
程序说明:头文件代码
*/
#ifndef LINKLIST_H_INCLUDED
#define LINKLIST_H_INCLUDED
#include <stdio.h>
#include <malloc.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LinkList;
void InitList(LinkList*&L);
bool ListInsert(LinkList*&L,ElemType i,int e);
void DispList(LinkList*L);
void DestroyList(LinkList*&L);
#endif // LINKLIST_H_INCLUDED
自定义函数代码如下:
/*
Copyright (c) 2015,烟台大学计算机与控制工程学院
All righs reserved
文件名称:test.cpp
作者: 李哲
完成日期:2015年10月3日
问题描述:建设单链表算法库
程序说明:自定义函数代码
*/
#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;
}
void InitList(LinkList *&L) //初始化链表,建立头节点
{
L=(LinkList *)malloc(sizeof(LinkList )); //给头节点建立内存空间
L->next=NULL;
}
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);
printf(" ");
p=p->next;
}
printf("\n");
}
void DestroyList(LinkList*&L)
{
LinkList *p=L,*q=p->next;
while(q!=NULL)
{
free(p);
p=q;
q=p->next;
}
}
运行结果:
至此这个算法库还不算完整,还可以加入求链表长度、查找等功能。po主会在之后慢慢完善这个算法库。:)