单链表删除算法
源代码在线查看: 单链表菜单.c
//单链表菜单
#include "Stdio.h"
#include "Conio.h"
#define flag 0
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}LNode,*LinkList;
int menu_select();
LinkList Creat_LinkList();
LNode *Get_LinkList(LinkList H,int i);
int Insert_LinkList(LinkList H,int i,datatype x);
int Del_LinkList(LinkList H,int i);
void Put_LinkList(LinkList H);
LNode *Locate_LinkList(LinkList H,int i);
main()
{
LinkList H;
LNode *p;
int i;
datatype x;
for(;;)
{
switch(menu_select())
{
case 1:
printf("****************************\n");
printf(" 单链表的建立\n");
printf("****************************\n");
H=Creat_LinkList();
break;
case 2:
printf("****************************\n");
printf(" 单链表的插入\n");
printf("****************************\n");
printf("输入 i:");
scanf("%d",&i);
printf("输入数字:");
scanf("%d",&x);
if(Insert_LinkList(H,i,x)==1)
Put_LinkList(H);
break;
case 3:
printf("****************************\n");
printf(" 通讯者信息的查询\n");
printf("****************************\n");
printf("输入 x:");
scanf("%d",&x);
p=Locate_LinkList(H,x);
if(p!=NULL)
printf("存在%d",x);
else
printf("不存在%d",x);
break;
case 4:
printf("****************************\n");
printf(" 通讯录信息的删除\n");
printf("****************************\n");
printf("输入 i:");
scanf("%d",&i);
if(Del_LinkList(H,i)==1)
Put_LinkList(H);
break;
case 5:
printf("****************************\n");
printf(" 通讯录链表的输出\n");
printf("****************************\n");
Put_LinkList(H);
break;
case 0:
printf(" 谢谢使用,再 见!\n");
getch();
return;
}
}
}
int menu_select()
{
int t;
printf("\n 单链表管理\n");
printf("=========================\n");
printf(" 1.单链表的建立\n");
printf(" 2.单链表的插入\n");
printf(" 3.单链表的查询\n");
printf(" 4.单链表的删除\n");
printf(" 5.单链表的输出\n");
printf(" 0.退 出 管理系统\n");
printf(" 请选择(0-5):");
for(;;)
{
scanf("%d",&t);
if(t5)
printf("\n\t输入错误,重选0-5:");
else
break;
}
return t;
}
LinkList Creat_LinkList()
{
LinkList L=NULL;
LNode *s,*R=NULL;
int x;
s=(LNode *)malloc(sizeof(LNode));
R=s;
L=s;
scanf("%d",&x);
while(x!=flag)
{
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
R->next=s;
R=s;
scanf("%d",&x);
}
R->next=NULL;
return L;
}
LNode *Locate_LinkList(LinkList H,datatype x)
{
LNode *p=H->next;
while(p!=NULL&&p->data!=x)
p=p->next;
return p;
}
LNode *Get_LinkList(LinkList H,int i)
{
LNode *p=H;
int j=0;
while(p->next!=NULL&&j {
p=p->next;
j++;
}
if(j==i) return p;
else return NULL;
}
int Insert_LinkList(LinkList L,int i,datatype x)
{
LNode *p,*s;
p=Get_LinkList(L,i-1);
if(p==NULL)
{
printf("参数i错!");
return 0;
}
else
{
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
s->next=p->next;
p->next=s;
return 1;
}
}
int Del_LinkList(LinkList H,int i)
{
LNode *p,*s;
p=Get_LinkList(H,i-1);
if(p==NULL)
{
printf("第i-1个结点不存在!");
return -1;
}
else
if(p->next==NULL)
{
printf("第i个结点不存在!");
return 0;
}
else
{
s=p->next;
p->next=s->next;
free(s);
return 1;
}
}
void Put_LinkList(LinkList H)
{
LNode *p;
p=H->next;
while(p!=NULL)
{
printf("%d\t",p->data);
p=p->next;
}
}