小总结
创建单链表
linklist *link_create()
{
linklist *L=(linklist *)malloc(sizeof(linklist));
if(L==NULL)
{
printf("申请失败");
return NULL;
}
else
{
L->len=0;
L->next=NULL;
return L;
}
}
创建结点
linklist *node_create()
{
linklist *p =(linklist *)malloc(sizeof(linklist));
if(p==NULL)
{
printf("结点申请失败\n");
return NULL;
}
else
{
p->data=0;
p->next=NULL;
return p;
}
}
头插
int link_insert(linklist *L,int in_data)
{
if(L==NULL)
{
printf("链表未创建\n");
return -1;
}
linklist *p = node_create();
p->data = in_data;
p->next = L->next;
L->next = p;
L->len++;
return 0;
}
尾插
int link_tail(linklist *L,int in_data)
{
if(L==NULL)
{
printf("链表未创建\n");
return -1;
}
linklist *tail = L;
while(tail->next!=NULL)
{
tail = tail->next;
}
linklist *p = node_create();
p->data = in_data;
p->next = tail->next;
tail->next = p;
L->len++;
return 0;
}
打印
int link_print(linklist *L)
{
if(L==NULL)
{
printf("链表未创建\n");
return -1;
}
linklist *p = L->next;
while(p!=NULL)
{
printf("%d\n",p->data);
p = p->next;
}
return 0;
}
判空
int link_empty(linklist *L)
{
if(L==NULL)
{
return -1;
}
if(L->next==NULL)
{
return 1;
}
}
头删
int del_head(linklist *L)
{
if(L==NULL)
{
return -1;
}
linklist *p = L->next;
L->next = p->next;
free(p);
p=NULL;
L->len--;
return 0;
}
尾删
int del_tail(linklist *L)
{
if(L == NULL)
{
return -1;
}
linklist *head = L;
while(L->next->next!=NULL)
{
L = L->next;
}
free(L->next);
L->next=NULL;
head->len--;
return 0;
}
按位置查找,返回找到的结点
linklist *serch_pos(linklist *L,int pos)
{
if(L==NULL)
{
return NULL;
}
if(pos<=0||pos>L->len)
{
printf("位置不合理");
return NULL;
}
int i=0;
for(i=0;i<pos;i++)
L=L->next;
return L;
}
按值查找,返回找到的结点位置
int serch_val_p(linklist *L,int val)
{
if(L==NULL)
{
printf("链表未创建\n");
return -1;
}
linklist *p = L->next;
int i=1;
while(p!=NULL&&p->data!=val)
{
p = p->next;
i++;
}
if(p!=NULL)
return i;
return -2;
}
按位置修改
int update_pos(linklist *L,int pos,int c)
{
if(L==NULL)
{
printf("链表未创建\n");
return -1;
}
if(pos<=0||pos>L->len)
{
printf("位置不合理");
return -2;
}
int i=0;
linklist *p = L;
for(i=0;i<pos;i++)
{
p = p->next;
}
p->data = c;
return 0;
}
按值修改
int update_val(linklist *L,int val,int c)
{
if(L==NULL)
{
printf("链表未创建\n");
return -1;
}
linklist *p =L->next;
while(p!=NULL&&p->data!=val)
{
p = p->next;
}
if(p!=NULL)
{
p->data = c;
return 0;
}
return -2;
}
任意位置删除
int del_any_pos(linklist *L,int pos)
{
if(L==NULL)
{
printf("链表未创建\n");
return -1;
}
if(pos<=0||pos>L->len)
{
printf("位置不合理\n");
return -2;
}
int i;
for(i=0;i<pos-1;i++)
{
L = L->next;
}
linklist *p;
p = L->next;
L->next = p->next;
free(p);
return 0;
}
销毁链表
int link_destroy(linklist **L)
{
if(*L==NULL)
{
printf("链表未创建\n");
return -1;
}
linklist **p;
while(*L)
{
*p = *L;
*L = (*L)->next;
free(*p);
*p=NULL;
}
return 0;
}
升序
int link_sort(linklist *L)
{
if(L==NULL)
{
printf("链表未创建\n");
return -1;
}
linklist *p = L->next;
int i=0,j=0,temp;
int len = L->len-1;
for(i=0;i<len;i++)
{
p=L->next;
for(j=0;j<len-i;j++)
{
if(p->data>p->next->data)
{
temp = p->next->data;
p->next->data = p->data;
p->data = temp;
}
p = p->next;
}
}
return 0;
}
逆置
linklist *link_inverse(linklist *L)
{
if(L==NULL)
{
printf("链表未创建\n");
return NULL;
}
linklist *p = link_create();
linklist *q;
p->len = L->len;
while(L->next!=NULL)
{
q=L;
link_insert(p,L->next->data);
L=L->next;
free(q);
}
free(L);
L = p;
return L;
}
斐波那契数列
int fib(int a)
{
if(a==1||a==2)
return 1;
else
return fib(a-1)+fib(a-2);
}
int print_fib(int a)
{
int i=0;
for(i=1;i<=a;i++)
{
printf("%d\t",fib(i));
}
printf("\n");
return 0;
}