2012/11/27

資料結構 刪除鍊結串列

資料結構 刪除鍊結串列




#include <stdlib.h>
#include <stdio.h>
#define MAX 10
struct List
{
    int Number;
    int Total;
    struct List *Next;
};

typedef struct List Node;
typedef Node * Link;

int Data[2][MAX]={1,3,5,7,2,4,6,8,9,10,
                15,35,10,67,25,65,38,70,30,20};


Link Delete_List(Link Head,int key)
{
    Link Pointer = Head;
    Link back;

    while(1){
        if(Pointer->Next == NULL){
            printf("Not found\n");
            break;
        }

        if(Head->Number == key){
            Head = Pointer->Next;
            free(Pointer);
            break;
        }
        back = Pointer;
        Pointer = Pointer->Next;

        if(Pointer->Number == key){
            back->Next = Pointer->Next;
            if(Pointer->Number == key){
                back->Next = Pointer->Next;
                free(Pointer);
                break;
            }
        }

    }
    return Head;
}


void Print_List(Link Head)
{
    Link Pointer = Head;
    while(Pointer != NULL){
        printf("[%d,%d]",Pointer->Number,Pointer->Total);
        Pointer = Pointer->Next;
    }
    printf("\n");
}

void Free_List(Link Head)
{
    Link Pointer;

    while(Head != NULL){
        Pointer = Head;
        Head = Head->Next;
        free(Pointer);
    }
}

Link Create_List(Link Head)
{
    Link New;
    Link Pointer;
    int i;
    Head = (Link)malloc(sizeof(Node));
    
    if(Head == NULL){
        printf("記憶體分配失敗\n");
    }else{
        Head->Number = Data[0][0];
        Head->Total = Data[1][0];
        Head->Next = NULL;

        Pointer = Head;
        for(i=1; i<MAX; i++){
            New = (Link)malloc(sizeof(Node));

            New->Number = Data[0][i];
            New->Total = Data[1][i];
            New->Next = NULL;

            Pointer->Next = New;
            Pointer = New;
        }
    }
    return Head;
}



void main()
{
    Link Head;
    int key;

    Head = Create_List(Head);
    if(Head != NULL){
        Print_List(Head);
        while(1){
            printf("Input 0 to Exit\n");
            printf("請輸入數值:");
            scanf("%d",&key);
            if(key == 0)
                break;
            Head = Delete_List(Head,key);
            Print_List(Head);
        }
        Free_List(Head);
    }
}

參考資料:
資料結構 黃國瑜/葉乃菁