#include "list.h"
Plink get_head()
{
Plink p=malloc(sizeof(Link));
if(p==NULL)
{printf("申请头结点失败");
return NULL;
}
p->len=0;
p->next=NULL;
return p;
}
void head_input(Plink L,int n)
{
if(L==NULL)
{printf("单链表不存在\n");
return;}
Plink p=malloc(sizeof(Link));
p->data=n;
p->next=L->next;
L->next=p;
L->len++;
}
void output(Plink L)
{int i;
if(L==0||L->len<0)
printf("单链表不存在或为空");
Plink t=malloc(sizeof(Link));
t=L;
for(i=0;i<L->len;i++)
{ t=t->next;
printf("%d\t",t->data);
}
printf("\n");
}
void tail_input(Plink L,int n)
{ int i;
Plink t=L;
for(i=0;i<L->len;i++)
{
t=t->next;
}
Plink p=malloc(sizeof(Link));
p->data=n;
t->next=p;
p->next=NULL;
L->len++;
}
void insert_any_pos(Plink L,int pos,int n)
{ int i;
Plink t=L;
for(i=0;i<pos-1;i++)
{
t=t->next;
}
Plink p=malloc(sizeof(Link));
p->data=n;
p->next=t->next;
t->next=p;
L->len++;
}
void dele_any_pos(Plink L,int pos)
{
int i;
Plink t=L;
for(i=0;i<pos-1;i++)
{
t=t->next;
}
Plink q;
q=t->next;
t->next=t->next->next;
free(q);
q=NULL;
L->len--;
}
void value_find_del(Plink L,int key,int n)
{
int i,sub;
Plink t=L;
for(i=0;i<L->len;i++)
{ sub=-1;
t=t->next;
if(t->data==key)
{
printf("查找成功\n");
t->data=n;
sub=1;
break;
}
}
if(sub==-1)
{
printf("查找失败\n");
}
}
void paixu(Plink L)
{
printf("进行简单选择排序\n");
int t;
Plink i,j,min;
for(i=L->next;i!=NULL;i=i->next)
{min=i;
for(j=i->next;j!=NULL;j=j->next)
{
if(j->data<min->data)
{
min=j;
}
if(i!=min)
{
t=i->data;
i->data=min->data;
min->data=t;
}
}
}
}
void nz(Plink L)
{
Plink t;
Plink q;
q=L->next->next;
t=L->next;
while(q!=NULL)
{
t->next=q->next;
q->next=L->next;
L->next=q;
q=t->next;
}
}
#ifndef _LIST_H_
#define _LIST_H_
#include<myhead.h>
typedef struct node
{
union
{
int len;
int data;
};
struct node *next;
}Link,*Plink;
Plink get_head();
void head_input(Plink L,int n);
void output(Plink L);
void tail_input(Plink L,int n);
void insert_any_pos(Plink L,int pos,int n);
void dele_any_pos(Plink L,int pos);
void value_find_del(Plink L,int key,int n);
void paixu(Plink L);
void nz(Plink L);
#endif
#include "list.h"
int main(int argc, const char *argv[])
{ //申请头结点函数,返回头结点地址
int i,a[10]={15,28,99,48,118,123,53,80,33,98};
int pos,n,key;
Plink L=get_head();
//头插法创建
/*
for(i=0;i<10;i++)
{
head_input(L,a[i]);
}
output(L);
*/
//尾插法
for(i=0;i<10;i++)
{
tail_input(L,a[i]);
}
output(L);
//任意位置插入一个节点
printf("请输入要插入的位置:\n");
scanf("%d",&pos);
printf("请输入要插入的值:\n");
scanf("%d",&n);
insert_any_pos(L,pos,n);
output(L);
//任意位置删除
printf("请输入要删除的位置:\n");
scanf("%d",&pos);
dele_any_pos(L,pos);
output(L);
//按照值查找并删除
printf("请输入要修改的值:");
scanf("%d",&key);
printf("要修改为什么\n:");
scanf("%d",&n);
value_find_del(L,key,n);
output(L);
//单链表排序
paixu(L);
output(L);
//单链表逆置
nz(L);
output(L);
return 0;
}