单链表删除算法

源代码在线查看: 单链表菜单.c

软件大小: 8 K
上传用户: xuhuizi
关键词: 单链表 删除 算法
下载地址: 免注册下载 普通下载 VIP

相关代码

				//单链表菜单 
				#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;
				    }
				}
							

相关资源