struct将LIFO转换为FIFO

时间:2014-06-17 20:45:10

标签: c struct

#include <stdio.h>
#include <stdlib.h>

typedef struct elt {
    struct elt *next; // Elément suivant
    struct elt *precedent;
    int value; // Valeur stockée dans le noeud
} ELT, *pELT;
pELT head=NULL;

pELT addElt(pELT head, int v) {
    pELT n;

    n=malloc(sizeof(ELT));
    n->value = v;
    n->next = head;

    return n;
}

void printElts(pELT l) {
    pELT p;

    for(p = l; p; p=p->next) {
        printf("Valeur : %d\n", p->value);
    }
}

int main(void) {
    head = addElt(head, 1);
    head = addElt(head, 2);
    head = addElt(head, 3);
    printElts(head);
    return EXIT_SUCCESS;
}

我想将这个LIFO(后进先出)结构转换为FIFO(先进先出)。 我不想改变主力。我只想用FIFO而不是LIFO打印

1 个答案:

答案 0 :(得分:0)

现在你将元素“前置”到列表中,这是一种stack

n = malloc(sizeof(ELT));
n->value = v;
n->next = head;

如果你想将元素“追加”到列表的末尾,使它成为一种queue,你只需要在列表中传递“添加元素”任务(例如递归),直到它结束:

pELT addElt(pELT head, int v) {
  if "head->next is NULL" {
    // end of list reached, put "v" here
  } else { 
    // we're in the middle of the list, go on with the child:
    head->next = addElt(head->next, v)
  }
}

这只是一个想法,实施非常简单