C语言单链表简单实现(简单程序复杂化)

2019-09-23 08:45:29来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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("\n这是一个链表,现有如下功能  1.添加节点  2.遍历链表  3.查找并删除节点  4.释放链表 5.退出程序 \n请输入你想要进行的操作的选项:\n" ); 
    out:
    scanf("%d",&number);
    switch(number){
        case 1:
            printf("你选择了添加节点\n请输入添加节点的值,输入-1结束添加\n");
            do{
                scanf("%d",&number);
                if(number != -1){
                    //添加一个新的节点挂载。 
                    add(&list,number);
                }
            }while(number != -1);
            printf("添加完毕");             
            break; 
        case 2:
            printf("你选择了遍历链表\n");
            //打印链表 
            print(&list); 
            break; 
        case 3:
            printf("你选择了查找并删除节点,请输入节点数据\n");
            scanf("%d",&number);
            //删除一个节点 
            deletel(&list,number); 
            break; 
        case 4:
            printf("你选择了释放链表");
            //释放链表 
            freel(&list); 
            printf("释放完毕"); 
            break; 
        case 5:
            goto end; 
        default :
            printf("输入错误,请重新输入\n");
            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\t",p->value);
    }
    printf("\n");
}
    //查找并删除节点
void deletel(List* list,int number){
    Node* p;
    int isFound =0;
    for(p=list->head;p;p=p->next){
        if(p->value==number){
            printf("找到了\n");
            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);
    } 
}

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


原文链接:https://www.cnblogs.com/Renqy/p/11571678.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:handy网络库源码阅读

下一篇:C++类的this指针详解