linklist.h
/*
文件名称:链表算法库的建立
作 者:胡德杰
完成日期:2017年9月21号
版 本 号:v1.1.8
*/
#include "stdio.h"
#include "malloc.h"
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 DestroyList(LinkList *&L); //销毁单链表
void DispList(LinkList *L); //输出单链表
void InitList(LinkList *&L); //初始化线性表
bool LinkEmpt(LinkList *&L); //判断链表是否为空
int Lisklength(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 Delete(LinkList *&L,int i,ElemType &e); //删除元素
linklist.cpp
#include "linklist.h" void CreateListF(LinkList *&L,ElemType a[],int n)//头插法建立单链表 { LinkList *s; int i; L=(LinkList *)malloc(sizeof(LinkList)); //创建链表 L->next=NULL; for(i=0;i<n;i++) { s=(LinkList *)malloc(sizeof(LinkList)); s->data=a[i]; s->next=L->next; L->next=s; } } void CreateListR(LinkList *&L,ElemType a[],int n) //尾插法建立单链表 { LinkList *s,*r; int i; L=(LinkList *)malloc(sizeof(LinkList)); //创建链表 L->next=NULL; r=L; for(i=0;i<n;i++) { s=(LinkList *)malloc(sizeof(LinkList)); s->data=a[i]; r->next=s; r=s; } r->next=NULL; } void DestroyList(LinkList *&L) //销毁单链表 { LinkList *p=L,*q=p->next; while(q!=NULL) { free(p); //释放 p=q; q=q->next; } free(p); } void DispList(LinkList *L) //输出单链表 { LinkList *p=L->next; while (p!=NULL) { printf("%d ",p->data); p=p->next; } printf("\n"); } void InitList(LinkList *&L) //初始化线性表 { L=(LinkList *)malloc(sizeof(LinkList)); L->next=NULL; } bool LinkEmpt(LinkList *&L) //判断链表是否为空 { return (L->next==NULL); } int Lisklength(LinkList *&L) //求链表长度 { int n=0; LinkList *p=L; while(p->next=NULL) { n++; p=p->next; } return n; } bool GetElem(LinkList *&L,int i,ElemType &e) //求指定位置的数据元素 { int j=0; LinkList *p=L; 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) //按元素值查找 { int i=1; LinkList *p=L->next; while(p!=NULL&&p->data!=e) { p=p->next; i++; } if(p==NULL) return 0; else return i; } bool ListInsert(LinkList *&L,int i,ElemType e) //插入元素 { int j=0; LinkList*p=L,*s; while(p!=NULL && j<i-1) { 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; } } bool Delete(LinkList *&L,int i,ElemType &e) //删除元素 { int j=0; LinkList *p=L,*q; while(j<i-1&&p!=NULL) { j++; p=p->next; } 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; } } 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; }
![]()
知识点总结: 单链表算法库的建立
学习心得:
链表写起来真的很麻烦,虽然很想放弃,但还是坚持了下来。