#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
} Link,*Linklist;
Link head;
void create_list()
{
Linklist p,q;
int x;
head.next=NULL;
q=&head;
scanf("%d",&x);
p=(Link*)malloc(sizeof(Link));
p->data=x;
while(x!=0)
{
q->next=p;
//p->next=NULL;
q=p;
q->next=NULL;
scanf("%d",&x);
p=(Link*)malloc(sizeof(Link));
p->data=x;
}
}
void print_list()
{
Linklist p;
p=&head;
//p=p->next;
while(p->next!=NULL)
{
p=p->next;
printf("%d ",p->data);
}
printf("\n");
//printf("%d ",p->data);
}
int del_list(int x)//删除链表中的元素x
{
Linklist p,q;
printf("请输入你要删除的元素x:\n");
scanf("%d",&x);
p=&head;
if(p==NULL)
return 0;
while(p->next!=NULL&&(p->next->data)!=x)
p=p->next;
if(p->next==NULL)
return 0;
q=p->next;
p->next=q->next;
free(q);
return 0;
}
int insert_list(int i,int e)//在第i个位置的前一位上插入元素e
{
int j=1;
Linklist p,q;
p=&head;
printf("请输入你要插入元素的位置i和插入的元素e\n");
scanf("%d%d",&i,&e);
q=(Link *)malloc(sizeof(Link));
q->data=e;
while(j<i)
{
p=p->next;
j++;
}
q->next=p->next;
p->next=q;
return 0;
}
int find_list(int i,int e)//查找链表中第一次出现的e,并输出他的位置
{
i=0;
Linklist p;
p=&head;
printf("请输入你要查找的元素e:\n");
scanf("%d",&e);
while(p->next!=NULL)
{
p=p->next;
i++;
if(p->data==e)
{
printf("元素的位置为:%d",i);
return 0;
}
}
printf("没有找到该元素\n");
return 0;
}
int main()
{
int i,e,x;
printf("请输入链表的元素,以零表示结束:\n");
create_list();
print_list();
printf("请选择你的操作:\n");
printf("0-->退出操作\n");
printf("1-->删除操作\n");
printf("2-->插入操作\n");
printf("3-->查找操作\n");
int d;
scanf("%d",&d);
if(x==0)
exit(0);
while(d==1||d==2||d==3)
{
switch(d)
{
case 1:del_list(x);printf("\n");print_list();break;
case 2:insert_list(i,e);printf("\n");print_list();break;
case 3:find_list(i,e);printf("\n");print_list();break;
}
printf("请选择你的操作:\n");
scanf("%d",&d);
if(x==0) exit(0);
}
return 0;
}