美文网首页
链表(20161221)

链表(20161221)

作者: Hassan_chao | 来源:发表于2016-12-22 20:41 被阅读7次
    #include<stdio.h>                  
    #include<stdlib.h>                      
    #include<string.h>
    #include<time.h>
    #include<unistd.h>
    #define LEN sizeof(STU)    //宏定义
    typedef struct student      //定义链表
    {
        int ID;
        char name[32];
        struct student *next;
    }STU;
    //添加节点
    STU* add_node(STU* head)
    {
        STU* temp=(STU*)malloc(LEN);
        printf("input ID:");
        scanf("%d",&temp->ID);
        printf("input name:");
        scanf("%s",temp->name);
        temp->next=NULL;
        temp->next=head->next;
    //将temp所指向的空间添加到链表上
        head->next=temp;
        temp=NULL;
    
        return head;
    }
    
    //遍历程序输出
    void show_link(STU *head)
    {
        if (NULL==head->next)
    {
    printf("链表为空");
    return;
    }else{
        STU *p=head->next;
        printf("\tID\tname\n");
        while(p!=NULL)
        {
            printf("\t%d\t%s\n",p->ID,p->name);
            p=p->next;
        }
    }
    return ;
    }
    //创建头结点
    STU *create_link(STU *head)
    {//若分配空间失败,则返回NULL
        head=(STU *)malloc(LEN);
    //判断节点是否分配空间成功
    if(NULL==head)
        {
        //重新分配空间
        head=(STU *)malloc(LEN);
        return head;
        }
    //将头结点返回
    printf("创建链表成功!!!\n");
    sleep(2);
    return head;
    }
    //头删程序
    STU *delete_head(STU *head)
    {
        if(NULL==head->next)
    {
    printf("\t链表为空,无数据可删\n");
    sleep(5);
    return head ;
    }
    //定义temp指针指向链表的第一个节点
        STU *temp=head->next;
    //头删开始
    head->next=temp->next;
    free(temp);
    temp=NULL;
    return head;
    }
    //修改节点值
    STU* modify_node(STU *head)
    {
    
    char name[32];
    printf("请输入要修改的名:");
    scanf("%s",name);
    STU *p=head->next;
    for(;p!=NULL;p=p->next)
        {
            //比较用户名是否存在,若存在则为要修改的节点
            if(strcmp(name,p->name)==0)
            {
                printf("\t该用户的信息为:\n");
                printf("name:%s\nID:%d\n",p->name,p->ID);
                printf("请输入修改后的信息:");
                scanf("%d",&p->ID);
                return head;
            }
            
        }
    if(p==NULL)
        printf("没有该用户\n");
    return head;
    }
    
    //查找节点值
    void find_node(STU *head)
    {
    char name[32];
    printf("请输入要查找的名:");
    scanf("%s",name);
    
    STU *p=head->next;
    
    for(;p!=NULL;p=p->next)
        {
            //比较用户名是否存在
            if(strcmp(name,p->name)==0)
            {
                printf("\t该用户的信息为:\n");
                printf("name:%s\nID:%d\n",p->name,p->ID);
                
                return ;
            }
            
        }
    if(p==NULL)
        printf("没有该用户\n");
    return ;
        
    }
    
    
    
    //选择菜单
    void menu()
    {
    
        //定义头节点
        STU *head=NULL;
        int choice;
        while(1)
    {
        system("clear");//清屏
        printf("\t\t1.创建链表\n");
        printf("\t\t2.添加节点\n");
        printf("\t\t3.删除节点\n");
        printf("\t\t4.修改节点值\n");
        printf("\t\t5.查找节点\n");
        printf("\t\t6.查看链表\n"); 
        printf("\t\t0.退出\n");
        printf("\t请选择\n:");
        scanf("%d",&choice);
        
        switch(choice)
        {
        case 1:
            head=create_link(head);
            printf("创建成功\n");
            break;
        case 2:
            {
            int i=0;
            for(i=0;i<5;i++)//默认5个
                head=add_node(head);
            printf("添加成功\n");
            break;
            }
        case 3:
            {
            head=delete_head(head); 
            break;
            }
        case 4:
            head=modify_node(head);
            break;
        case 5:
            find_node(head);
            sleep(5);
            break;
        case 6:
            {
            show_link(head);
            sleep(6);
            break;
            }
        case 0:
            {exit(1);//退出程序
            break;}
        default:
            {printf("\t请重新选择!!\n");
            sleep(2);//停顿两秒
            break;
            }
        }
    }
    return ;
    }
    
    
    int main()
    {//创建头节点
    int i;
    STU *head=(STU*)malloc(sizeof(STU));
    head->next=NULL;
    //添加节点
    //for(i=0;i<3;i++)
    //head=add_node(head);
    //遍历链表
    //show_link(head);
    //调用操作菜单:menu()
    menu();
    return 0;
    
    }
    

    相关文章

      网友评论

          本文标题:链表(20161221)

          本文链接:https://www.haomeiwen.com/subject/eduhvttx.html