main.cpp
/*
*Copyright (c) 2014,烟台大学计算机学院
*All rights reserved.
*文件名称:Annpion.cpp
*作者:王耀鹏
*完成日期:2015年10月30日
*版本号:v1.0
*
*问题描述:按照“0207将算法变程序”部分建议的方法,建设自己的专业基础设施算法库。这一周,建的是单链表的算法库。
*输入描述:无。
*输出描述:输出插入元素后的链表,删除第二个元素后的链表,删除的元素。
*/
#include "LinkList.h"
#include<stdio.h>
int main()
{
int e;
LinkList *L;
InitList(L);
ListInsert(L, 1, 15);
ListInsert(L, 1, 10);
ListInsert(L, 1, 5);
ListInsert(L, 1, 20);
printf("插入多个元素后:");
DispList(L);
ListDelete(L,2,e);
printf("删除第二个元素后:");
DispList(L);
printf("删除的元素:%d",e);
DestroyList(L);
return 0;
}
LinkList.h
/*
*Copyright (c) 2014,烟台大学计算机学院
*All rights reserved.
*文件名称:Annpion.cpp
*作者:王耀鹏
*完成日期:2015年10月30日
*版本号:v1.0
*
*问题描述:算法库头文件。
*输入描述:无。
*输出描述:无。
*/
#ifndef LINKLIST_H_INCLUDED
#define LINKLIST_H_INCLUDED
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LinkList;
void CreateListF(LinkList *&L,ElemType a[],int n);//头插法建立单链表
void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表
void InitList(LinkList *&L); //初始化线性表
void DestroyList(LinkList *&L); //销毁线性表
bool ListEmpty(LinkList *L); //判断线性表是否为空
int ListLength(LinkList *L); //求线性表长度
void DispList(LinkList *L); //输出线性表
bool GetElem(LinkList *L,int i,ElemType &e); //求线性表某个数据元素值
int LocateElem(LinkList *L,ElemType e); //按元素值查找
bool ListInsert(LinkList *&L,int i,ElemType e); //插入数据元素
bool ListDelete(LinkList *&L,int i,ElemType &e); //删除数据元素
#endif // LINKLIST_H_INCLUDED
LinkList.cpp
/*
*Copyright (c) 2014,烟台大学计算机学院
*All rights reserved.
*文件名称:Annpion.cpp
*作者:王耀鹏
*完成日期:2015年10月30日
*版本号:v1.0
*
*问题描述:算法库cpp文件。
*输入描述:无。
*输出描述:无。
*/
#include "LinkList.h"
#include <stdio.h>
#include<malloc.h>
void CreateListF(LinkList *&L,ElemType a[],int n)
{
LinkList *p;
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
for(int i=0;i<n;++i)
{
p=(LinkList *)malloc(sizeof(LinkList));
p->data=a[i];
p->next=L->next;
L->next=p;
}
}
void CreateListR(LinkList *&L,ElemType a[],int n)
{
LinkList *p,*q;
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
q=L;
for(int i=0;i<n;++i)
{
p=(LinkList *)malloc(sizeof(LinkList));
p->data=a[i];
p->next=q->next;
q->next=p;
q=p;
}
q->next=NULL;
}
void InitList(LinkList *&L)
{
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
}
void DestroyList(LinkList *&L)
{
LinkList *q=L,*p=L->next;
while(p!=NULL)
{
free(q);
q=p;
p=q->next;
}
free(q);
}
bool ListEmpty(LinkList *L)
{
return (L->next==NULL);
}
int ListLength(LinkList *L)
{
LinkList *p=L->next;
int i=0;
while(p!=NULL)
{
++i;
p=p->next;
}
return i;
}
void DispList(LinkList *L)
{
LinkList *p=L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
bool GetElem(LinkList *L,int i,ElemType &e)
{
LinkList *p=L;
int j=0;
while(j<i&&p!=NULL)
{
++j;
p=p->next;
}
if(p==NULL)
return false;
else
{
e=p->data;
return true;
}
}
int LocateElem(LinkList *L,ElemType e)
{
LinkList *p=L->next;
int i=1;
while(p->data!=e &&p!=NULL)
{
p=p->next;
++i;
}
if(p==NULL)
return 0;
else
{
return p->data;
}
}
bool ListInsert(LinkList *&L,int i,ElemType e)
{
LinkList *q,*p=L;
int j=0;
while(j<i-1&&p!=NULL)
{
p=p->next;
++j;
}
if(p==NULL)
return false;
else
{
q=(LinkList *)malloc(sizeof(LinkList));
q->data=e;
q->next=p->next;
p->next=q;
return true;
}
}
bool ListDelete(LinkList *&L,int i,ElemType &e)
{
LinkList *q,*p=L;
int j=0;
while(j<i-1 && p!=NULL)
{
p=p->next;
++j;
}
if(p==NULL)
{
return false;
}
else
{
q=p->next;
if(q==NULL)
return false;
e=q->data;
p->next=q->next;
free(q);
return true;
}
}
运行结果: