⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listops.c

📁 Apriori 的C语言实现 .是非常好的
💻 C
字号:
/*----------------------------------------------------------------------  File    : listops.c  Contents: some special list operations  Author  : Christian Borgelt  History : 02.11.2000 file created from file lists.h----------------------------------------------------------------------*/#include <stdio.h>#include "listops.h"/*----------------------------------------------------------------------  Functions----------------------------------------------------------------------*/void* l_sort (void *list, LCMPFN cmpfn, void *data){                               /* --- sort a list with mergesort */  LE *src, *dst;                /* list of source/destination lists */  LE **end;                     /* end of list of destination lists */  LE *in1, *in2;                /* input lists for merging */  LE **out;                     /* output list for merging */  if (!list) return list;       /* check for an empty list */  for (src = list; src->succ; ) {    dst = src; src = src->succ; /* traverse the list and split it */    dst->succ = NULL;           /* into a list (abused pred ptr.) of */   }                             /* single element lists (succ ptr.) */  while (src->pred) {           /* while more than one source list */    end = &dst;                 /* start list of destination lists */    do {                        /* merge pairs of source lists */      out = end;                /* start output list (merged input) */      in1 = src;                /* remove two (one) source list(s) */      in2 = src->pred;          /* and use them as input for merging */      if (!in2) {               /* if there is only one source list */        *end = in1; end = &in1->pred;        break;                  /* append it to the list of */      }                         /* output list and abort the loop */      src = in2->pred;          /* remove lists from list of sources */      while (1) {               /* source lists merge loop */        if (cmpfn(in1, in2, data) < 0) {                                /* if first list's element is smaller */          *out = in1;           /* move element to output list, */          out  = &(in1->succ);  /* advance output pointer and */           in1  = in1->succ;     /* remove element from input list */          if (!in1) break; }    /* if the list gets empty, abort loop */        else {                  /* if second list's element is smaller */          *out = in2;           /* move element to output list, */          out  = &(in2->succ);  /* advance output pointer and */          in2  = in2->succ;     /* remove element from input list */          if (!in2) break;      /* if the list gets empty, abort loop */        }                       /* (merge input lists into one) */      }      if (in1) *out = in1;      /* append remaining elements */      else     *out = in2;      /* to the output list */      end = &(*end)->pred;      /* advance destination list pointer */    } while (src);              /* while there is another source list */    *end = NULL;                /* terminate destination list */    src  = dst;                 /* transfer destination list */  }                             /* to source list and start over */  for (src->pred = NULL; src->succ; src = src->succ)    src->succ->pred = src;      /* set predecessor pointers */  return dst;                   /* return a pointer to the first */}  /* l_sort() */               /* element of the sorted list *//*--------------------------------------------------------------------*/void* l_reverse (void *list){                               /* --- reverse a list */  LE *le = NULL;                /* to traverse the list elements */  while (list) {                /* while the list is not empty */    le       = list;            /* get the next list element */    list     = le->succ;        /* exchange the successor */    le->succ = le->pred;        /* and the predecessor */    le->pred = list;            /* of the list element */  }  return le;                    /* return a pointer to */}  /* l_reverse() */            /* the new first element */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -