链表
#include<stdio.h>
#include<stdlib.h>
typedef int elemtype;
typedef struct node
{
elemtype data;
struct node *next;
} linklist;
linklist *InitList(linklist *L)///初始化链表
{
L=(linklist *)malloc(sizeof(linklist));
L->next=NULL;
return(L);
}
linklist *CreateList(int n)///输入
{
int x,i;
linklist *L,*r,*p;
L=InitList(L);
r=L;
printf("输入数据:\n");
for(i=1; i<=n; i++)
{
scanf("%d",&x);
p=(linklist *)malloc(sizeof(linklist));
p->data=x;
p->next=NULL;
r->next=p;
r=r->next;
}
return(L);
}
void output(linklist *L)///输出
{
int i;
linklist *p;
p=L->next;
printf("输出数据:\n");
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
int InsItem(linklist *L,elemtype item,int i) ///插入
{
int j;
linklist *p,*t;
p=L;
j=1;
t=(linklist*)malloc(sizeof(linklist));
t->data=item;
if(L->next==NULL)
{
if(i==0)
{
L->next=t;
L->next=NULL;
return 1;
}
else return 0;
}
while((p->next!=NULL) &&(j<i))
{
p=p->next;
j++;
}
if ((p->next==NULL)&&(j<i))
{
printf("The node %d is not exist\n",i);
return(0);
}
else
{
t->next=p->next;
p->next=t;
return(1);
}
}
int DelItem (linklist *L, int i) ///删除
{
int j;
linklist *p, *q;
p=L;
j=1;
if( L->next==0)
{
printf("The linklist is empty.\n");
return(0);
}
while((p->next!=0) &&(j<i))
{
p=p->next;
j++;
}
if(p->next==NULL)
{
printf("The node %d is not exist\n",i);
return(0);
}
else
{
q=p->next;
p->next= p->next->next;
free(q);
return(1);
}
}
void locItem(linklist *L,int n)///查找
{
linklist *p=L->next;
int flag=0;
int i=1;
while(p!=NULL)
if(p->data!=n)
{
i++;
p=p->next;
}
else
{
flag=1;
break;
}
if(flag==0)
printf("%d不在链表内\n",n);
else
printf("在链表内的第%d个位置\n",i);
return ;
}
int main()
{
linklist *l;
int i,t,j,x1,x2,n;
l=InitList(l);
printf("输入有几个数据:\n");
scanf("%d",&n);
l=CreateList(n);
output(l);
printf("\n");
printf("输入要插入的数据和位置:\n");
scanf("%d %d",&t,&i);
InsItem(l,t,i);
output(l);
printf("\n");
printf("输入要删除的数据的位置:\n");
scanf("%d",&j);
DelItem(l,j);
output(l);
printf("\n");
printf("输入要查找的数据:\n");
scanf("%d",&x1);
locItem(l,x1);
printf("输入要查找的数据:\n");
scanf("%d",&x2);
locItem(l,x2);
return 0;
}