단 방향 순환 링크 초기 화 통합

8285 단어 데이터 구조
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR -1
#define TRUE 1
#define FALSE -1
#define NULL 0
#define OVERFLOW -2
#define ElemType int
#define Status int
typedef int ElemType
typedef int Status
#define LEN sizeof(LNode)
#define MLC (LinkList)malloc(sizeof(LNode))
/*
//          
InitList(&L) //      L
DestroyList(&L) //     L
ClearList(&L) //     L
ListEmpty(L) //         
ListLength(L) //    L   
GetElem(L,i,&e) //    L  i   
LocateElem(L,e,compare()) //       L   e
compare() //         ,  Bool
compareArray() //         ,  Bool
PriorElem(L,cur_e,&prio_e) //     L   e       
NextElem(L,cur_e,&next_e) //     L   e       
ListInsert(&L,i,e) //    L  i         e,  Bool
ListDelete(&L,i,e) //     L  i   ,     e  ,  Bool
ListTraverse(L,visit()) //     :   L       visit()
visit() //  visit                          ,
//                ,              。
//                                 “  ”
*/
//---------      -----------
//             
typedef struct LNode{ //                 
    ElemType data; //   
    struct LinkListnext; //   
}LNode, *LinkList;//     struct LNode Lnode,      Lnode *    LinkList

//                             
LinkList LinkListInit_Out_Ptr() {
    LinkList L = (LinkList)malloc(LEN);
    if (L == NULL)          //             
        exit(OVERFLOW);
    L->next = L;           // next    
    return L;
}

//                    。           
Status InitList_CirLink(LinkList *&L) {  //               
    L = (LinkList)malloc(sizeof(LNode));
    if (!L) { /*        */
        exit(OVERFLOW);
    }
    L->next = L;/*          */
    return TRUE;
}
//          
linklist *Linklist_Connect(LinkList h1, int l1, LinkList h2, int l2){
    LinkList p1, p2;
    int l = 1;//Counter    
    LinkList p;//      
    p1 = h1->next;//h1 Node1
    while (l<l1) {
        l++;
        p1 = p1->next;  //    1     rearA
    }
    p2 = h2->next;//h2 Node1
    l = 1;//Reset Counter      
    while (l<l2) {
        l++;
        p2 = p2->next; //    2     rearB 
    }
    LinkList p = p1->next;//p1 = p1->next;   A     
    p1->next = (p2->next)->next;
    //    :  1        2     head     ,  head  ,  2        
    p2->next = p; //   2       1      <==>   A         p2->next
    free(p2->next);             //          
    return h1;  
}
LinkList CirLinklist_Merge_Guan(LinkList h1, int Len1, LinkList h2,int Len2) {
    //        ,LinkList h1    1    ,int Len1   1   
    LinkList p1, p2, rearA, rearB, p; //         ,             ,        ,                1     ,                   
    p1 = h1;//    p1  h1,     ,           。
    p2 = h2;//    p2  h2
    p = h1;//p1 = p1->next;   A         

    p1 = h1->next;//p1   h1's Node1 
    int l = 1;//Counter     
    while (l<l1) { //           。
        l++;
        p1 = p1->next;  //    1     rearA
    }

    p2 = h2->next;//h2's Node1
    l = 1;//Reset Counter      
    while (l<l2) {
        l++;
        p2 = p2->next; //    2     rearB 
    }
    rearA = p1;
    rearB = p2;     
    //    :  1        2     head     ,  head  ,  2        
    rearA->next = (rearB->next)->next; 
    rearB->next = p; //   2       1      <==>   A         p2->next
    free(p2->next); //          
    return h1;
}

좋은 웹페이지 즐겨찾기