單鏈表

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

typedef struct Link{
    int base;
    struct Link *next;
}Link; 

void createLink(Link **LN,int A[],int n){//創(chuàng)建鏈表 
    Link *node,*end,*first;
    *LN =  (Link *)malloc(sizeof(Link));
    first = end =*LN;
    int i= 0 ;
    for(i;i<n;i++){
        node = (Link *)malloc(sizeof(Link));
        node->base=A[i];
        end->next = node;
        end = node;
    } 
    end->next=NULL;
}

void traversal(Link *LN){//遍歷鏈表 
    Link *Node;
    Node =LN->next;
    while(Node->next!=NULL){
        printf("%d\n",Node->base);
        Node=Node->next;
    }
    printf("%d\n",Node->base);
}

int getLength(Link *LN){//獲取鏈表長度 
    int length=0;
    Link *Node;
    Node =LN->next;
    while(Node->next!=NULL){
        length++;
        Node=Node->next;
    }
    length++;
    return length;
}

int insert(Link **LN,int index,int val){//插入元素 
    Link *Node;
    Link *end;
    end = *LN;
    int j=1;
    int length=getLength(*LN);
    if(index>length+1){
        printf("刪除位置不合法請重新選擇!\n");
    }else if(index==length+1){//插入末尾的情況 
        Node = (Link*)malloc(sizeof(Link));
        Node->base=val;
        Node->next=NULL;
        end = end->next;
        for(j;j<length;j++){
            end=end->next;
        }
        
        end->next=Node;
    
    }else if(index<=length){//插入中間的情況 
        for(j;j<index;j++){
            end=end->next;
        }
        Node = (Link*)malloc(sizeof(Link));
        Node->base=val;
        printf("second\n");
        Link *record;
        record = end->next;
        end->next=Node;
        printf("third\n");
        Node->next=record;
        
    }
} 
void deleteNode(Link **LN,int index){//刪除元素 
    Link *end;
    end = *LN;
    int j=1;
    int length=getLength(*LN);
    if(index>length){
        printf("刪除位置不合法請重新選擇!\n");
    }else if(index==length){//刪除末尾的情況 
        for(j;j<length;j++){
            end=end->next;
        }
        printf("second\n");
        end->next=NULL;
        printf("third\n");
    }else if(index<length){//刪除中間的情況 
        for(j;j<index;j++){
            end=end->next;
        }
        Link *record;
        record = end->next;
        end->next=record->next;
    }
} 

int main(int argc, char *argv[]) {
    Link L;
    Link *LN;//頭指針 
    int i;
    printf("1.向鏈表中添加元素!\n");
    printf("2.遍歷鏈表!\n");
    printf("3.獲得鏈表長度!\n");
    printf("4.向鏈表中插入元素!\n");
    printf("5.刪除鏈表中的元素!\n");
    printf("********************************************\n"); 
    while(1){
        printf("請輸入要進(jìn)行的操作!\n");
        scanf("%d",&i);
        switch(i){
            case 5:
                printf("請輸入要刪除元素的位置!\n");
                int index;
                scanf("%d",&index);
                deleteNode(&LN,index);
                break;
            case 4:{
                printf("請輸入想要插入的位置!\n");
                int index,val;
                scanf("%d",&index);
                printf("請輸入插入的元素!\n");
                scanf("%d",&val);
                insert(&LN,index,val);
                break;
                } 
            case 3:
                printf("鏈表的長度為%d\n",getLength(LN));
                break;
            case 2:
                printf("鏈表中含有的元素:\n");
                traversal(LN);
                break;  
            case 1:
                printf("請輸入鏈表的長度!\n");
                int n;
                scanf("%d",&n);
                int A[n];
                printf("請輸入要加入到鏈表的數(shù)據(jù)!\n");  
                int j=0;
                for(j;j<n;j++){
                    scanf("%d",&A[j]);
                }
                createLink(&LN,A,n);
                break;

        }
    }
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容