#include
#include
#define L sizeof(struct Linklist)
struct Linklist
{
int date;
struct Linklist *next;//定义了一个指向struct linklist类型数据的指针变量next,用来存放结点的地址。
};
struct Linklist *creat();
void print (struct Linklist );
void insert(struct Linklist ,int i,int x);
void delet(struct Linklist ,int i);
int GetElem(struct Linklist ,int i);
int jishu(struct Linklist *head);
struct Linklist *creat()//定义creat函数,指针类型,所以函数带回一个指针量
{
printf("请输入链表数据:");
struct Linklist *head,*p,*p1;
head=(struct Linklist*)malloc(L);
head->next=NULL;
head=p=p1=(struct Linklist*)malloc(L);
scanf("%d",&p->date);
int n=1;
while(p->date!=0)
{
p=(struct Linklist*)malloc(L);
scanf("%d",&p->date);
p1->next=p;
p1=p;
n++;
}
p->next=NULL;
return(head);
} //建立链表
void print (struct Linklist *head)// struct Linklist *head是定义一个结构体指针变量head
{
struct Linklist *p;
printf("链表数据为:");
p=head;
while(p->date!=0)
{
printf("%d ",p->date);
p=p->next;
}
printf("\n");
return;
}//输出链表
void insert( struct Linklist *head,int i,int x)
{
int j=1;
struct Linklist *p,*r;
p=head;
while(p&&j
{
p=p->next;
j++;
}
if(!p||j>i)
printf("插入出错!");
r=(struct Linklist *)malloc(L);
r->date=x;
r->next=p->next;
p->next=r;
}//在第i个位置之前插入数据x
void delet(struct Linklist *head,int i)
{
int j=1;
struct Linklist *p,*r;
p=head->next;
while(p&&j
{
p=p->next;
j++;
}
if(!p||j>i-1)
printf("删除出错!");
r=p->next;
p->next=r->next;
free(r);
}//删除第i个位置上的数据
int GetElem(struct Linklist *head,int i)
{
int j=1,e;
struct Linklist *p;
p=head->next;
while(p&&j
{
p=p->next;
j++;
}
if(!p||j>i)
printf("查找出错!");
e=p->next->date;
return(e);
}//查找第i个位置上的数据是多少,并赋值给e
int jishu(struct Linklist *head)
{
int n=0;
struct Linklist *p;
p=head;
while(p->next!=NULL)
{
n++;
p=p->next;
n++;
}
return(n);
}//计数,链表的个数
int main()
{
int m,n,k,h,e,o;
struct Linklist *head;
printf("请选择您要做的操作:\n1.建立链表\n2.输出链表\n3.给链表中插入数据\n4.删除链表中的数据\n5.查找链表中的数据\n6.链表中的数据计数\n\n");
head=creat();
print (head);
printf("请输入插入的位置和插入的数据");//调用插入函数
scanf("%d,%d",&m,&n);
insert(head, m, n);
print(head);
printf("\n");
printf("请输入要删除的数据的位置");//调用删除函数
scanf("%d",&k);
delet( head, k);
print(head);
printf("\n");
printf("请输入要查找数据的位置");//调用查找函数
scanf("%d",&h);
e=GetElem( head,h);
printf("要查找的数据的位置在第%d个\n",&e);
o=jishu( head);
printf("链表中的数据有%d个\n",&o);
return 0;
}