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);
    } 
}

讀書和健身總有一個在路上


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM