zoukankan      html  css  js  c++  java
  • C语言单链表简单实现(简单程序复杂化)

    PS: goto还是很好玩的。 
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct _node{
        int value;
        struct _node *next;
    } Node;
    typedef struct _list{
        Node* head;
    }List;
    
    void add(List* plist,int number);
    void print(List* list);
    void deletel(List* list,int number);
    void freel(List* list);
    
    int main(int argc, char *argv[]) {
        Node *head = NULL;
        List list;
        int number=0;
        list.head=NULL;
        for(;;){
        printf("
    这是一个链表,现有如下功能  1.添加节点  2.遍历链表  3.查找并删除节点  4.释放链表 5.退出程序 
    请输入你想要进行的操作的选项:
    " ); 
        out:
        scanf("%d",&number);
        switch(number){
            case 1:
                printf("你选择了添加节点
    请输入添加节点的值,输入-1结束添加
    ");
                do{
                    scanf("%d",&number);
                    if(number != -1){
                        //添加一个新的节点挂载。 
                        add(&list,number);
                    }
                }while(number != -1);
                printf("添加完毕");             
                break; 
            case 2:
                printf("你选择了遍历链表
    ");
                //打印链表 
                print(&list); 
                break; 
            case 3:
                printf("你选择了查找并删除节点,请输入节点数据
    ");
                scanf("%d",&number);
                //删除一个节点 
                deletel(&list,number); 
                break; 
            case 4:
                printf("你选择了释放链表");
                //释放链表 
                freel(&list); 
                printf("释放完毕"); 
                break; 
            case 5:
                goto end; 
            default :
                printf("输入错误,请重新输入
    ");
                goto out;
            }
        }
        end:
        printf("拜拜"); 
        return 0;
    }
    void add(List* plist,int number){
        Node *p =(Node*)malloc(sizeof(Node));
        p->value =number;
        p->next =NULL;
        Node *last =plist->head;
        if(last){
            while(last->next){
                last = last->next;
            }
            last->next=p;
        }else{
            plist->head = p;
        }
    }
        //遍历链表 
    void print(List* list){
        Node *p;
        for(p=list->head;p;p=p->next){
            printf("%d	",p->value);
        }
        printf("
    ");
    }
        //查找并删除节点
    void deletel(List* list,int number){
        Node* p;
        int isFound =0;
        for(p=list->head;p;p=p->next){
            if(p->value==number){
                printf("找到了
    ");
                isFound = 1;
                break ; 
            }
        }
            if(!isFound){
            printf("没找到"); 
            }
            Node *q;
        for(q=NULL,p=list->head;p;q=p,p=p->next){
            if(p->value==number){
                if(q){
                q->next = p->next;
            }else{
                list->head=p->next;
            }
                free(p);
                printf("已经删除"); 
                break ;
            }
        } 
    }
        //释放链表 
    void freel(List* list){
        Node *q;
        Node* p;
        for(p=list->head;p;p=q){
        q=p->next;
        free(p);
        } 
    }

    读书和健身总有一个在路上

  • 相关阅读:
    【转】Android-Input input&按键布局文件
    【转】Android-Input 触摸设备
    【转】IE沙箱拖拽安全策略解析
    FireFox 插件xpi文件签名2
    如何给Firefox附加组件签名
    【转】用opencv使摄像头在30fps下捕获1080p的数据
    Displaylink安卓驱动
    无主之地2 不费子弹手枪
    jsoncpp
    [APIO2010] 算法竞赛竞赛经典 巡逻
  • 原文地址:https://www.cnblogs.com/Renqy/p/11571678.html
Copyright © 2011-2022 走看看