Раздел «Информация».ListSample:

Пример реализации двусвязного списка

#include <stdio.h>

#define DTYPE int

struct li {
   struct li* next, *prev;
   DTYPE data;
};

struct list {
   struct li* first, *last;
};

typedef struct li li_t;
typedef struct list list_t;

int push(list_t* l, DTYPE x);
int pop(list_t* l, DTYPE *x);

int unshift(list_t* l, DTYPE x);
int shift(list_t* l, DTYPE *x);


int push(list_t *l, DTYPE x) {
   li_t *a = (li_t*)malloc(sizeof(li_t));
   if(a == NULL) 
      return 0;
   a->data = x;
   a->next = l->first;
   a->prev = NULL;
        if(l->first) { 
           l->first->prev = a;
        }
   l->first = a;
   return 1;
}

int pop(list_t *l, DTYPE *x) {
   if(l && l->first != NULL ) {
      li_t *new_first = l->first->next;
      *x = l->first->data;
      free (l->first); 
      l->first = new_first;
      if(new_first != NULL) {
         new_first->prev = 0;
      }
      return 1;
   } else {
      fprintf(stderr, "List is empty\n");
      return 0;
   }
}


int unshift(list_t* l, DTYPE x) {
 ....
}
int shift(list_t* l, DTYPE *x) {
 ...
}

CommonWebForm
Type: Другое
Stuff: Olimpic
Date:  
ID:  
Importance: Medium
Author:  
Summary: