linkedlist.c

来自「General Hidden Markov Model Library 一个通用」· C语言 代码 · 共 147 行

C
147
字号
/*********************************************************************************       This file is part of the General Hidden Markov Model Library,*       GHMM version 0.8_beta1, see http://ghmm.org**       Filename: ghmm/ghmm/linkedlist.c*       Authors:  Matthias Heinig**       Copyright (C) 1998-2004 Alexander Schliep*       Copyright (C) 1998-2001 ZAIK/ZPR, Universitaet zu Koeln*       Copyright (C) 2002-2004 Max-Planck-Institut fuer Molekulare Genetik,*                               Berlin**       Contact: schliep@ghmm.org**       This library is free software; you can redistribute it and/or*       modify it under the terms of the GNU Library General Public*       License as published by the Free Software Foundation; either*       version 2 of the License, or (at your option) any later version.**       This library is distributed in the hope that it will be useful,*       but WITHOUT ANY WARRANTY; without even the implied warranty of*       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU*       Library General Public License for more details.**       You should have received a copy of the GNU Library General Public*       License along with this library; if not, write to the Free*       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA***       This file is version $Revision: 1442 $*                       from $Date: 2005-10-12 19:09:41 +0200 (Wed, 12 Oct 2005) $*             last change by $Author: grunau $.********************************************************************************/#ifdef HAVE_CONFIG_H#  include "../config.h"#endif#include <stdlib.h>#include "mes.h"#include "ghmm_internals.h"void ighmm_list_append(i_list * list, int val){  i_el * last;  i_el * el;  el = ighmm_list_init_el(val);  if (list->first == NULL) {    list->first = el;    list->last = el;  }  else {    last = list->last;    last->next = el;    list->last = el;  }  list->length++;}void ighmm_list_insert(i_list * list, int val) {  i_el * first;  i_el * el;  el = ighmm_list_init_el(val);  if (list->first == NULL) {    list->first = el;    list->last = el;  }  else {    first = list->first;    el->next = first;    list->first = el;  }  list->length++;}void ighmm_list_print(i_list * list) {  i_el * el = list->first;  printf("LIST : ");  while(el != NULL) {    printf("%i, ", el->val);    el = el->next;  }  printf("\n");}int * ighmm_list_to_array(i_list * list) {#define CUR_PROC "ighmm_list_to_array"  int counter = 0;  int * array;  i_el * el;  ARRAY_CALLOC (array, list->length);  el = list->first;  while(el != NULL) {    array[counter] = el->val;    el = el->next;    counter++;  }  return array;STOP:     /* Label STOP from ARRAY_[CM]ALLOC */  m_free(array);  return NULL;#undef CUR_PROC}i_list * ighmm_list_init_list() {#define CUR_PROC "ighmm_list_init_list"  i_list * list;  ARRAY_CALLOC (list, 1);  list->first = NULL;  list->last = NULL;  list->length = 0;  return list;STOP:     /* Label STOP from ARRAY_[CM]ALLOC */  ighmm_list_free(list);  return NULL;#undef CUR_PROC}i_el * ighmm_list_init_el(int val) {#define CUR_PROC "ighmm_list_init_el"  i_el * el;  ARRAY_CALLOC (el, 1);  el->next = NULL;  el->val = val;  return el;STOP:     /* Label STOP from ARRAY_[CM]ALLOC */  free(el);  return NULL;#undef CUR_PROC}int ighmm_list_free(i_list * list) {  i_el * el;  i_el * next;  el = list->first;  while(el != NULL) {    next = el->next;    free(el);    el = next;  }  return 0;}

⌨️ 快捷键说明

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