#include <stdio.h>
#include <stdlib.h>
//结构体
typedef struct node
{
int data;
struct node *next;
} linklist;
//创建节点
linklist * createnode(int n)
{
linklist *l;
l=(linklist *)malloc(sizeof(linklist));
l->data=n;
l->next=NULL;
return l;
}
//初始化头结点
linklist * initlink()
{
linklist *head;
head=(linklist *)malloc(sizeof(linklist));
head->next=NULL;
return head;
}
//创建单链表(尾插法)
linklist *createlink()
{
linklist *cur,*new,*head;
int i,n,x;
head=initlink();
if(head==NULL)
{
return NULL;
}
cur=head;
printf("请输入链表长度:");
scanf("%d",&x);
for(i=0;i<x;i++)
{
printf("请输入数据:");
scanf("%d",&n);
new=createnode(n);
cur->next=new;
cur=cur->next;
}
return head;
}
//查找第j个结点,用e返回结点里的值
int searchnode(linklist *head,int j,int *e)
{
linklist *l=head->next;
int i=1;
while(l&&i<j)
{
l=l->next;
i++;
}
if(l==NULL||i!=j)
{
return 0;
}
*e=l->data;
return 1;
}
//查找
int searchnode1(linklist *head,int e)
{
int i=0;
linklist *l=head;
while(l->next)
{
l=l->next;
i++;
if(e==l->data)
{
return i;
}
}
return 0;
}
//插入
int ListInsert(linklist *head,int i,int e)
{
linklist *p,*new;
int j;
p=head;
j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i)
{
return 0;
}
new=(linklist *)malloc(sizeof(linklist));
new->data=e;
new->next=p->next;
p->next=new;
return 1;
}
//删除
int listdel(linklist *head,int i,int *e)
{
int j=1;
linklist *p=head,*q;
while(p->next&&j<i)
{
p=p->next;
j++;
}
if(!(p->next)||j>i)
{
return 0;
}
q=p->next;
p->next=q->next;
*e=q->data;
free(q);
return 1;
}
//打印单链表
void print(linklist *head)
{
linklist *p;
p=head;
while(p->next)
{
p=p->next;
printf("%d",p->data);
}
}
//主函数
int main()
{
int a,b,c,i;
linklist *head;
head=createlink();
if(head==NULL)
{
printf("创建失败!\n");
}
else
{
printf("创建成功!\n");
}
printf("请输入你要查找结点的位置:");
scanf("%d",&c);
a=searchnode(head,c,&b);
if(a==0)
{
printf("查找失败!\n");
}
else
{
printf("查找成功!\n");
printf("b=%d\n",b);
}
printf("请输入你要查找的数据:");
scanf("%d",&c);
a=searchnode1(head,c);
if(a==0)
{
printf("查找失败!\n");
}
else
{
printf("查找成功!\n");
printf("a=%d\n",a);
}
printf("请输入插入的位置:");
scanf("%d",&c);
printf("请输入插入的数据:");
scanf("%d",&b);
a=ListInsert(head,c,b);
if(a==0)
{
printf("插入失败!\n");
}
else
{
printf("插入成功!\n");
}
print(head);
printf("请输入删除的位置:");
scanf("%d",&c);
a=listdel(head,c,&b);
if(a==0)
{
printf("删除失败!\n");
}
else
{
printf("删除成功!\n");
}
print(head);
return 0;
}
#include <stdlib.h>
//结构体
typedef struct node
{
int data;
struct node *next;
} linklist;
//创建节点
linklist * createnode(int n)
{
linklist *l;
l=(linklist *)malloc(sizeof(linklist));
l->data=n;
l->next=NULL;
return l;
}
//初始化头结点
linklist * initlink()
{
linklist *head;
head=(linklist *)malloc(sizeof(linklist));
head->next=NULL;
return head;
}
//创建单链表(尾插法)
linklist *createlink()
{
linklist *cur,*new,*head;
int i,n,x;
head=initlink();
if(head==NULL)
{
return NULL;
}
cur=head;
printf("请输入链表长度:");
scanf("%d",&x);
for(i=0;i<x;i++)
{
printf("请输入数据:");
scanf("%d",&n);
new=createnode(n);
cur->next=new;
cur=cur->next;
}
return head;
}
//查找第j个结点,用e返回结点里的值
int searchnode(linklist *head,int j,int *e)
{
linklist *l=head->next;
int i=1;
while(l&&i<j)
{
l=l->next;
i++;
}
if(l==NULL||i!=j)
{
return 0;
}
*e=l->data;
return 1;
}
//查找
int searchnode1(linklist *head,int e)
{
int i=0;
linklist *l=head;
while(l->next)
{
l=l->next;
i++;
if(e==l->data)
{
return i;
}
}
return 0;
}
//插入
int ListInsert(linklist *head,int i,int e)
{
linklist *p,*new;
int j;
p=head;
j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i)
{
return 0;
}
new=(linklist *)malloc(sizeof(linklist));
new->data=e;
new->next=p->next;
p->next=new;
return 1;
}
//删除
int listdel(linklist *head,int i,int *e)
{
int j=1;
linklist *p=head,*q;
while(p->next&&j<i)
{
p=p->next;
j++;
}
if(!(p->next)||j>i)
{
return 0;
}
q=p->next;
p->next=q->next;
*e=q->data;
free(q);
return 1;
}
//打印单链表
void print(linklist *head)
{
linklist *p;
p=head;
while(p->next)
{
p=p->next;
printf("%d",p->data);
}
}
//主函数
int main()
{
int a,b,c,i;
linklist *head;
head=createlink();
if(head==NULL)
{
printf("创建失败!\n");
}
else
{
printf("创建成功!\n");
}
printf("请输入你要查找结点的位置:");
scanf("%d",&c);
a=searchnode(head,c,&b);
if(a==0)
{
printf("查找失败!\n");
}
else
{
printf("查找成功!\n");
printf("b=%d\n",b);
}
printf("请输入你要查找的数据:");
scanf("%d",&c);
a=searchnode1(head,c);
if(a==0)
{
printf("查找失败!\n");
}
else
{
printf("查找成功!\n");
printf("a=%d\n",a);
}
printf("请输入插入的位置:");
scanf("%d",&c);
printf("请输入插入的数据:");
scanf("%d",&b);
a=ListInsert(head,c,b);
if(a==0)
{
printf("插入失败!\n");
}
else
{
printf("插入成功!\n");
}
print(head);
printf("请输入删除的位置:");
scanf("%d",&c);
a=listdel(head,c,&b);
if(a==0)
{
printf("删除失败!\n");
}
else
{
printf("删除成功!\n");
}
print(head);
return 0;
}