THÊM XOÁ 1 PHẦN TỬ TẠI 1 VỊ TRÍ TRONG DANH SÁCH


CẤU TRÚC DỮ LIỆU CỦA LIST

Code:

typedef unsigned int Position;
typedef int ElementType;
typedef struct Node{
    ElementType Element;
    Node* Next;
};
typedef Node * List;

XÂY DỰNG MỘT SỐ HÀM CƠ BẢN

Code:

Node * Make_Node(ElementType x) {
    Node * temp = (Node*)malloc(sizeof(Node));
    temp->Element = x;
    return temp;
}
List MakeNull_List() {
    List temp = (List)malloc(sizeof(List));
    temp->Next = NULL;
    return temp;
}
char Empty_List(List L) {
    return L->Next == NULL;
}

THÊM VÀO DANH SÁCH 1 NODE

Code:

void Insert(List L, Node * p) {
    p->Next = L->Next;
    L->Next = p;
}

THÊM VÀO DANH SÁCH 1 NODE TẠI 1 VỊ TRÍ

Code:

void Insert(List L, Node * p, Position i) {
    List temp = L;
    Position j = 1;
    while(j<i && temp!=NULL) {
        temp = temp->Next;
        j++;
    }
    if(i==j)
        Insert(temp,p);
    else
        printf("\nThis position is not true.");
}

XOÁ KHỎI DANH SÁCH 1 NODE

Code:

void Delete_List(List L) {
    Node * p = L->Next;
    L->Next = p->Next;
    free(p);
}

XOÁ KHỎI DANH SÁCH 1 NODE TẠI 1 VỊ TRÍ

Code:

void Delete_List(List L, Position i) {
    List temp = L;
    Position j = 1;
    while(j<i && temp!=NULL) {
        temp = temp->Next;
        j++;
    }
    if(i==j)
        Delete_List(temp);
    else
        printf("\nThis position is not true.");
}

XÂY DỰNG HÀM NHẬP XUẤT

Code:

void Out_List(List L) {
    List temp = L;
    while(!Empty_List(temp)) {
        printf("%d\t",temp->Next->Element);
        temp = temp->Next;
    }
}
void Delete_List(List L) {
    Node * p = L->Next;
    L->Next = p->Next;
    free(p);
}

CHƯƠNG TRÌNH THAM KHẢO

Code:

#include "conio.h"
#include "stdio.h"
#include "alloc.h"
typedef unsigned int Position;
typedef int ElementType;
typedef struct Node{
    ElementType Element;
    Node* Next;
};
typedef Node * List;

Node * Make_Node(ElementType x) {
    Node * temp = (Node*)malloc(sizeof(Node));
    temp->Element = x;
    return temp;
}
List MakeNull_List() {
    List temp = (List)malloc(sizeof(List));
    temp->Next = NULL;
    return temp;
}
char Empty_List(List L) {
    return L->Next == NULL;
}
void Insert(List L, Node * p) {
    p->Next = L->Next;
    L->Next = p;
}
void Insert(List L, Node * p, Position i) {
    List temp = L;
    Position j = 1;
    while(j<i && temp!=NULL) {
        temp = temp->Next;
        j++;
    }
    if(i==j)
        Insert(temp,p);
    else
        printf("\nThis position is not true.");
}
List Input_List(unsigned int n) {
    List temp = MakeNull_List();
    ElementType x;
    unsigned int i = 1;
    while(i<=n) {
        printf("\tValue %d = ",i);
        scanf("%d",&x);
        Insert(temp,Make_Node(x));
        i++;
    }
    return temp;
}
void Out_List(List L) {
    List temp = L;
    while(!Empty_List(temp)) {
        printf("%d\t",temp->Next->Element);
        temp = temp->Next;
    }
}
void Delete_List(List L) {
    Node * p = L->Next;
    L->Next = p->Next;
    free(p);
}
void Delete_List(List L, Position i) {
    List temp = L;
    Position j = 1;
    while(j<i && temp!=NULL) {
        temp = temp->Next;
        j++;
    }
    if(i==j)
        Delete_List(temp);
    else
        printf("\nThis position is not true.");
}
void main() {
    clrscr();
    unsigned int n;
    Position p;
    ElementType x;
    printf("Nhap n = ");
    scanf("%d",&n);
    List S = Input_List(n);
    printf("This List: \n");
    Out_List(S);
    printf("\nInput a value to inset: ");
    scanf("%d",&x);
    printf("Input a position to insert: ");
    scanf("%d",&p);
    Insert(S,Make_Node(x),p);
    printf("The new List: \n");
    Out_List(S);
    printf("\nThe new list already deleles at the posiotion p:\n");
    Delete_List(S,p);
    Out_List(S);
    getch();
}