#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef int elemtype;
struct node
{
elemtype data;
struct node *next;
};
typedef struct node slnodetype;
int initiate1(slnodetype **h)
{
*h=(slnodetype *)malloc(sizeof(slnodetype));
if((*h)==NULL)
return 0;
(*h)->next=NULL;
return 1;
}
int CreatL1(slnodetype **h,elemtype a[],int n)
{
slnodetype *p,*s;
int j;
initiate1(h);
p=*h;
for(j=0;j<=n-1;j++)
{
if((s=(slnodetype *)malloc(sizeof(slnodetype)))==NULL)
return 0;
s->data=a[j];
s->next=NULL;
p->next=s;
p=s;
}
return 1;
}
int insertsl(slnodetype *h,int i,elemtype x)
{
slnodetype *p,*s;
int j;
p=h;
j=0;
while((p->next!=NULL)&&(j<i-1))
{
p=p->next;
j++;
}
if(j!=i-1)
{
printf("\n插入位置不合理!");
return 0;
}
if((s=(slnodetype *)malloc(sizeof(slnodetype)))==NULL)
return 0;
s->data=x;
s->next=p->next;
p->next=s;
return 1;
}
int deletesl(slnodetype *h,int i)
{
slnodetype *p,*s;
int j;
p=h;
j=0;
while((p->next->next!=NULL)&&(j<i-1))
{
p=p->next;
j++;
}
if(j!=i-1)
{
printf("\n 删除位置不合理!");
return 0;
}
s=p->next;
p->next=s->next;
free(s);
return 1;
}
out_put(slnodetype *head)
{
slnodetype *p;
int i=0;
p=head->next;
printf("\n当前的线性表数据内容为");
while(p!=NULL)
{
printf(" %d",p->data);
p=p->next;
i++;
}
printf("\n线性表的表长为%d\n",i);
}
void same_delete(slnodetype *h)
{
slnodetype *p,*s,*q;
int flag;
p=h->next;
while(p->next)
{
q=h;
flag=1;
while(q!=p)
if(p->next->data==q->next->data)
{
s=p->next;
p->next=s->next;
free(s);
flag=0;
break;
}
else
q=q->next;
if(flag)
p=p->next;
}
}
void reverse(slnodetype *h)
{
slnodetype *p=h->next,*q;
h->next=NULL;
while(p)
{
q=p->next;
p->next=h->next;
h->next=p;
p=q;
}
}
void oushu_creat(slnodetype *h,slnodetype *oushu)
{
slnodetype *p=h->next,*s=oushu;
while(p)
{
if(p->data%2==0)
{
s=s->next;
s->data=p->data;
}
p=p->next;
}
s->next=NULL;
}
void jishu_delete(slnodetype *h)
{
slnodetype *p=h,*s;
int flag;
while(p->next)
{
flag=1;
if(p->next->data%2)
{
s=p->next;
p->next=s->next;
free(s);
flag=0;
}
if(flag)
p=p->next;
}
}
void main()
{
int i,j,m;
elemtype x,a[10];
slnodetype *head,*oushu;
for (i=0;i<=9;i++)
{
printf("\nplease input NO.%d data ",i+1);
scanf("%d",&a[i]);
}
CreatL1(&head,a,10);
CreatL1(&oushu,a,10);
out_put(head);
printf("\nPlease input the value of m:m=1---insert m=2---delete m=3---exit\nm=4---same_delete"
" m=5---reverse m=6---oushu_Creat m=7---jishu_delete\nm=");
scanf("%d",&m);
if(m==1)
{
printf("Please input insert location and insert data:");
scanf("%d%d",&i,&x);
insertsl(head,i,x);
out_put(head);
}
else if(m==2)
{
printf("Please input delete location:");
scanf("%d",&j);
deletesl(head,j);
out_put(head);
}
else if(m==3)
exit(1);
else if(m==4)
{
same_delete(head);
out_put(head);
}
else if(m==5)
{
reverse(head);
out_put(head);
}
else if(m==6)
{
oushu_creat(head,oushu);
out_put(oushu);
}
else if(m==7)
{
jishu_delete(head);
out_put(head);
}
else
printf("The value of m is wrong!");
}