#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"common.h"
LinkList *CreateLinkList()
{
LinkList *list; //定义结构体指针list
list = (LinkList *)malloc(sizeof(LinkList));//开辟一个空间size大小为结构体大小
if ( list = =NULL)//判断空间是否开辟成功
{
perror("CreateLinkList->malloc");
return NULL;
}
memset(list ,0 ,sizeof(LinkList)); //对新开辟的空间进行数据初始化
printf("%s-%s-%d---------\n",__FILE__,__FUNCTION__,__LINE__);
//打印文件名,所在的函数以及所在行数
list->next = NULL;//成的空间里的next指针成员为空
return list;//返回list表格
}
void ClearLinkList(LinkList *list)//定义清空表格函数功能
{
int i;
LinkList *p;
LinkList *q;//定义变量
if(list == NULL)//判断表格是否为空
printf("list error!\n");
p=list->next;//p指针存放结构体next成员存储值
list->next=NULL;//next成员为空
while(p != NULL)//在p指针不为空的情况下,将p的指针内容赋值给q;
//再将p指针指向下一个空间,释放q指针指向空间
//q赋为空,防止成为野指针
{
q = p;
p = p->next;
free(q);
q = NULL;
}
}
int FullLinkList(LinkList *list)//判断表格是否为满
{
return 0;
}
int EmptyLinkList(LinkList *list)
{
return list->next == NULL;
}
int LengthLinkList(LinkList *list)//计算表格长度
{
int len;
LinkList *p = list ;
len = 0;
while(p->next != NULL)//在链表next成员变量不为空的情况下执行循环
{
len ++;
p = p->next;//p指针按链表顺序移动
}
return len;
}
int InsertLinkList(LinkList *list, int local, data_t data)
{
int i;
LinkList *p;
LinkList *q;
if(local < 0 || local > LengthLinkList(list));//判断插入位置是否有效
{
printf("local error \n");
return -1;
}
q = malloc(sizeof(LinkList));//开辟空间
if( q = NULL)//判断空间是否开辟成功
{
perror("InsertLinkList->malloc");
return -1;
}
memset(q ,0 ,sizeof(LinkList));//空间初始化
q->data=data;//把内容装入链表
q->next=NULL;
p = list;//查找需要插入的位置
for(i=0;i < local ;i++)
p = p->next;
q->next = p->next;//将新开辟空间的地址存入上个格子的next成员
p->next = q;
return 0;
}
int DeleteLinkList(LinkList *list ,int local)
(
int i;
LinkList *p=list;
LinkList *q;
if(EmptyLinkList(list))//判断是否为空
{
printf("linklist is empty!\n")
return -1;
}
if(local<0 || local > LengthLinkList(list))//判断删除位置是否存在
{
printf("local error !\n");
return -1;
}
for(i = 0;i < local-1;i++)//找到需要删除的前一个节点locai-1
p = p->next;
q = p->next;//q指针指向local节点
p->next = q->next;//local-1节点赋next成员存储local+1节点的首地址
free(q);//释放local节点空间
q = NULL;
return 0;
}
int SearchLinkList(LinkList *list,int local, data_t *data)
{
int i;
LinkList *p = list->next;
if(EmptyLinkList(list))//判断链表是否为空
{
printf("linklist is empty!\n")
return -1;
}
if(local<0 || local > LengthLinkList(list))//判断搜寻位置是否存在
{
printf("local error !\n");
return -1;
}
for(i = 0;i<local;i++)//指针指向local节点
p=p->next;
*data = p->data;//将local节点data成员内容给data
}
int ChangLinkList(LinkList *list ,int local,data_t *data)
{
int i;
LinkList *p=list->next;
if(EmptyLinkList(list))//判断链表是否为空
{
printf("linklist is empty!\n")
return -1;
}
if(local<0 || local > LengthLinkList(list))//判断插入地址是否存在
{
printf("local error !\n");
return -1;
}
for(i=0;i<local;i++)
p=p->next;
p->data = data;
}
void printLinkList(LinkList *list)
{
LinkList *p = list;
while(p->next!=NULL)//循环打印输出
{
p = p->next;
printf("%d",p->data;
}
printf("\n");
}
void FreeLinkList(LinkList **list)
{
ClearLinkList( *list);
free(list);
list=NULL;
}
int LocateLinkList(LinkList *list,data_t data)
{
int i=0;
LinkList *p=list->next;
if(EmptyLinkList(list))//判断链表是否为空
{
printf("linklist is empty!\n")
return -1;
}
while(p->next != NULL)
{
i++;
if(p->data==data)
{
printf("%d",i);
}
p=->next;
}
}
common.h
#ifndef _COMMON_H
#define _COMMON_H
typedef int data_t;
typedef struct linklist
{
data_t data;
struct linklist *next;
}LinkList;
LinkList *CreateLinkList();
void ClearLinkList(LinkList *list);
int FullLinkList(LinkList *list);
int EmptyLinkList(LinkList *list);
int LengthLinkList(LinkList *list);
int InsertLinkList(LinkList *list,int local,data_t data);
int DeleteLinkList(LinkList *list,int local);
int SearchLinkList(LinkList *list,int local,data_t data);
int ChangeLinkList(LinkList *list,int local,data_t data);
void printLinkList(LinkList *list);
void FreeLinkList(LinkList **list);
int LocatdLinkList(LinkList *list ,data_t data);
#endif