#测试文件
#include "linklist.h"
LinkListPtr my_create()
{
LinkListPtr L = (LinkListPtr)malloc(sizeof(Node));
if(NULL == L)
{
printf("链表创建失败\n");
return NULL;
}
L -> len = 0;
L -> next = NULL;
printf("创建成功\n");
return L;
}
//判空
int my_empty(LinkListPtr L)
{
if(NULL == L)
{
printf("所给链表不合法\n");
return -0;
}
return L -> next == NULL || L -> len ==0;
}
//申请节点
LinkListPtr my_buynode(datatype e)
{
LinkListPtr p = (LinkListPtr)malloc(sizeof(Node));
if(NULL == p)
{
printf("节点申请失败\n");
return NULL;
}
p -> next = NULL;
p -> data = e;
return p;
}
//头插
int my_head(LinkListPtr L, datatype e)
{
if(NULL == L)
{
printf("插入失败\n");
return 0;
}
LinkListPtr p = my_buynode(e);
if(NULL == p)
{
return 0;
}
p -> next = L -> next ;
L -> next = p;
L -> len++;
printf("插入成功\n");
return 1;
}
//遍历
void my_show(LinkListPtr L )
{
if(NULL == L || my_empty(L))
{
printf("遍历失败\n");
return ;
}
printf("------当前的列表元素是-------\n");
LinkListPtr q = L -> next;
while(q != NULL)
{
printf("%c\t", q -> data);
q = q -> next;
}
printf("\n");
return ;
}
//按位置查找返回节点位置
LinkListPtr my_pos(LinkListPtr L, int pos)
{
if(NULL == L || my_empty(L) || pos < 1 || pos > L -> len)
{
printf("查找失败\n");
return NULL;
}
LinkListPtr q = L;
for(int i = 0; i < pos; i++)
{
q = q -> next;
}
return q;
}
//任意位置插入
int my_insert_post(LinkListPtr L, int pos, datatype e)
{
if(NULL == L || my_empty(L) || pos < 1 || pos > L -> len+1 )
{
printf("插入失败\n");
return 0;
}
LinkListPtr q = my_pos(L, pos-1);
LinkListPtr p = my_buynode(e);
if(NULL == p)
{
printf("申请节点失败\n");
return 0;
}
p -> next = q -> next;
q -> next = p;
L -> len++;
printf("插入成功\n");
return 1;
}
//尾插
int my_tail(LinkListPtr L, datatype e)
{
if(NULL == L || my_empty(L))
{
printf("插入失败\n");
return 0;
}
LinkListPtr p = my_buynode(e);
LinkListPtr q = my_pos(L, L -> len);
if(NULL == p)
{
printf("申请节点失败\n");
return 0;
}
p -> next = q -> next;
q -> next = p;
L -> len++;
printf("尾插成功\n");
return 1;
}
int my_delete_head(LinkListPtr L)
{
if(NULL == L || my_empty(L))
{
printf("删除失败\n");
return 0;
}
LinkListPtr q = L -> next;
L -> next = q -> next;
free(q);
q == NULL;
L -> len--;
printf("删除成功\n");
return 1;
}
int my_delete_pos(LinkListPtr L, int pos)
{
if(NULL == L || my_empty(L) || pos < 1 || pos > L -> len)
{
printf("任意位置删除失败\n");
return 0;
}
LinkListPtr q = my_pos(L, pos-1);
LinkListPtr p = q -> next;
q -> next = p -> next;
free(p);
L -> len--;
p == NULL;
return 1;
}
int my_delete_tail(LinkListPtr L)
{
if(NULL == L || my_empty(L))
{
printf("尾删失败\n");
return 0;
}
LinkListPtr q = my_pos(L, L -> len-1);
L -> len--;
free(q -> next);
q -> next = NULL;
return 1;
}
int my_search_pos(LinkListPtr L, datatype e)
{
if(NULL == L || my_empty(L))
{
printf("查找失败\n");
return 0;
}
int index = 0;
LinkListPtr q = L -> next;
while(q != NULL)
{
index++;
if(q -> data == e)
{
printf("%d\n", index);
return index;
}
q = q -> next;
}
return 0;
}
//按位置进行修改
int my_xiugai_pos(LinkListPtr L, int pos, datatype e)
{
if(NULL == L || pos < 1 || pos > L -> len || my_empty(L))
{
printf("修改失败\n");
return 0;
}
LinkListPtr p = my_pos(L, pos);
if(NULL == L)
{
printf("修改失败\n");
return 0;
}
p -> data = e;
printf("修改成功\n");
return 1;
}
int my_xiugai_value(LinkListPtr L, datatype e, datatype b)
{
if(NULL == L || my_empty(L))
{
printf("修改失败\n");
return 0;
}
LinkListPtr q = L -> next;
while(q -> data != e)
{
q = q -> next;
}
q -> data = b;
printf("修改成功\n");
return 1;
}
//链表进行排序
/*
void my_sort(LinkListPtr L)
{
if(NULL == L || my_empty(L))
{
printf("链表排序失败\n");
return ;
}
int i = 0;
int j =0;
datatype temp;
LinkListPtr p = L -> next;
for(i = 1 ; i < L -> len; i++)
{
for(j = 0; j < L -> len -i; j++)
{
if(((p+j) -> data) >((p+j+1) -> data))
{
temp = *(p+j);
*(p+j) = *(p+j+1);
*(p+j+1) = temp;
}
}
}
return ;
}
*/
//链表翻转
void my_reverse(LinkListPtr L)
{
if(NULL == L || my_empty(L) || L -> len <= 1)
{
printf("翻转失败\n");
return ;
}
LinkListPtr H = L -> next;
LinkListPtr p;
L -> next = NULL;
while(H != NULL)
{
p =H;
H = H -> next;
p -> next = L -> next;
L -> next = p;
}
printf("翻转成功\n");
return ;
}
void my_free(LinkListPtr L)
{
if(NULL == L || my_empty(L))
{
printf("销毁失败\n");
return ;
}
while(L -> next != NULL)
{
my_delete_head(L);
}
free(L);
L == NULL;
return ;
}