将元素添加到C结构中序列的前面

将元素添加到C结构中序列的前面,c,struct,sequence,typedef,C,Struct,Sequence,Typedef,我需要你的帮助来理解我的else陈述有什么问题。如果(seq->top!=NULL),我不知道如何保持上一个值 我的起始问题是,它被这个函数覆盖了。现在我重写了它,需要找到一种方法,在添加新值的同时保持seq->bottom的值。我想这就是您想要的: typedef struct stack_node { ETYPE data; struct stack_node *prev, *next; }NODE; struct seq_struct { // "Container"

我需要你的帮助来理解我的else陈述有什么问题。如果(seq->top!=NULL),我不知道如何保持上一个值


我的起始问题是,它被这个函数覆盖了。现在我重写了它,需要找到一种方法,在添加新值的同时保持seq->bottom的值。

我想这就是您想要的:

typedef struct stack_node {
   ETYPE data;
   struct stack_node *prev, *next;
}NODE;

struct seq_struct {
   // "Container" struct
   NODE* top, *bottom;
   int size;
};

void seq_add_front(Seq seq, ETYPE val){

    /* create a node to be added to the front of the sequence */
    NODE* topq = malloc(sizeof(NODE));

    topq->data = val;

if(seq->top==NULL){
    topq->prev=NULL;
    topq->next=NULL;
    seq->top = topq;
    seq->bottom=topq;

}
   else{
    topq->prev=NULL;
    topq->next=NULL;

    seq->top=topq;
    seq->bottom=topq->next;
    //seq->top=topq;


   }

   /* increment the size */
   seq->size++;

}

请注意,此else子句中的bottom不需要更改。

在该代码示例中,您甚至没有
else
语句。@nixeagle抱歉我的错误。现在我刚刚重命名了应该是else-statement的东西。那么,它现在可以工作了吗?你复制了真实的代码,没有重新输入,对吗?如果没有,就这样做。是的,看起来应该是这样的。但这仍然不起作用。不管我调用这个函数多少次,我只得到最后一次调用(输入值)。所有以前的值都被覆盖了?!你的程序里肯定有别的东西。是的,我确实弄明白了,这是我序列的print_函数有问题。非常感谢!=)
   else {
    topq->prev=NULL; // make sure our prev is null
    topq->next = seg->top; // set our next to the current top
    seg->top->prev = topq; // set the current top to point back to us
    seq->top=topq; // set current top to be us
   }