C ++ enterprise list (another one-way linked list implementation)

LinkList.h

 

#include <WINDOWS.H> 
#include <stdio.h> // list Summary point 
typedef struct LINKNODE 
{ 
    LINKNODE * Next; 
} LinkNode; // linked list node 
typedef struct LINKLIST 
{ 
    LinkNode head; int size; 
} LinkList; // traversing the nodes function pointer 
typedef void (* PRINTLINKNODE) (LinkNode * ); // comparison function pointer 
typedef int (* COMPARENODE) (* LinkNode, LinkNode * ); // initialize list 
LinkList * Init_LinkList (); //




    







The position of a node parenthesis 
void Insert_LinkList (LinkList List *, int POS, LinkNode * Data); 

// delete a node according to the position 
void RemoveByPos_LinkList (LinkList List *, int POS); 

// Find the node 
int Find_LinkList (LinkList List *, LinkNode * Data, COMPARENODE Compare); 

// returns the size of the list 
int Size_LinkList (LinkList * List); 

// print list 
void Print_LinkList (LinkList * List, PRINTLINKNODE Print); 

// release memory 
void FreeMem_LinkList (* List LinkList );

 

LinkList.cpp

 

#include " LinkList.h " 

// initialization list 
LinkList * Init_LinkList () 
{ 
    LinkList * List = (LinkList *) the malloc ( the sizeof (LinkList)); 
    List -> size = 0 ; 
    List -> head.next = NULL;
     return List; 
} 

// The node position of a parenthesis 
void Insert_LinkList (LinkList List *, int POS, LinkNode * Data) 
{ 
    IF (List Data == NULL || == NULL) 
    { 
        return ; 
    } 
    IF (pos < 0 || pos >= list->size)
    {
        pos = list->size;
    }
    LinkNode* pCurrent = &(list->head);
    for (int i = 0; i < pos; i++)
    {
        pCurrent = pCurrent->next;
    }
    data->next = pCurrent->next;
    pCurrent->next = data;
    list->size++;
}

// 根据位置删除一个结点
void RemoveByPos_LinkList(LinkList* list, int pos)
{
    if (list == NULL)
    {
        return;
    }
    if (pos < 0 || pos >= list->size)
    {
        return;
    }
    LinkNode* pCurrent = &(list->head);
    for (int i = 0; i < pos; i++)
    {
        pCurrent = pCurrent->next;
    }
    pCurrent->next = pCurrent->next->next;
    list->size--;
}

// 查找结点
int Find_LinkList(LinkList* list, LinkNode* data, COMPARENODE compare)
{
    if (list == NULL || data == NULL)
    {
        return -1;
    }
    int flag = -1;
    int index = 0;
    LinkNode* pCurrent = list->head.next;
    while (pCurrent != NULL)
    {
        if (compare(data, pCurrent) == 0)
        {
            flag = index; 
            break;
        }
        pCurrent = pCurrent->next;
        index++;
    }
    return flag;
}

// 返回链表的大小
int Size_LinkList(LinkList* list)
{
    if (list == NULL)
    {
        return -1;
    }
    return list->size;
}

// 打印链表
void Print_LinkList(LinkList* list, PRINTLINKNODE print)
{
    if (list == NULL)
    {
        return;
    }
    LinkNode* pCurrent = list->head.next;
    while (pCurrent != NULL)
    {
        print(pCurrent);
        pCurrent = pCurrent->next;
    }
}

// 释放内存
void FreeMem_LinkList(LinkList* list)
{
    if (list == NULL)
    {
        return;
    }
    free(list);
}

 

main.cpp

 

#include "LinkList.h"

typedef struct PERSON{
    LinkNode node;
    char name[64];
    int age;
}Person;

void MyPrint(LinkNode* data)
{
    Person* p = (Person*)data;
    printf("Name:%s, Age:%d\n", p->name, p->age);
}

int MyCompare(LinkNode* node1, LinkNode* node2)
{
    Person* p1 = (Person*)node1;
    Person* p2 = (Person*)node2;
    if ((p1->age == p2->age) && (strcmp(p1->name, p2->name) == 0))
    {
        return 0;
    }
    return -1;
}

int main()
{
    //创建链表
    LinkList* list = Init_LinkList();

    //创建数据
    Person p1, p2, p3, p4, p5;
    strcpy_s(p1.name, sizeof("aaa"), "aaa");
    strcpy_s(p2.name, sizeof("bbb"), "bbb");
    strcpy_s(p3.name, sizeof("ccc"), "ccc");
    strcpy_s(p4.name, sizeof("ddd"), "ddd");
    strcpy_s(p5.name, sizeof("eee"), "eee");

    p1.age = 10;
    p2.age = 20;
    p3.age = 30;
    p4.age = 40;
    p5.age = 50 ; 

    // the node in the linked list 
    Insert_LinkList (List, 0 , (LinkNode *) & P1); 
    Insert_LinkList (List, 0 , (LinkNode *) & P2); 
    Insert_LinkList (List, 0 , (LinkNode * ) & P3); 
    Insert_LinkList (List, 0 , (LinkNode *) & P4); 
    Insert_LinkList (List, 0 , (LinkNode *) & P5); 

    // print 
    Print_LinkList (List, MyPrint);
     // delete node 
    RemoveByPos_LinkList ( List, 2 ); 

    // print 
    printf ( "--------------- \ the n- " ); 
    Print_LinkList (List, MyPrint); 
    printf ( " --------------- \ the n- " ); 

    // Find 
    the Person findP; 
    strcpy_s (findP.name, sizeof ( " bbb " ), " bbb " ); 
    findP.age = 20 ;
     int POS = Find_LinkList (List, (LinkNode *) & findP, MyCompare); 
    printf ( " position: D% \ n- " , POS); 

    // release list memory 
    FreeMem_LinkList (List); 
    getchar (); 
    return  0;
}

 

Guess you like

Origin www.cnblogs.com/duxie/p/11306083.html