在C struct中将元素添加到序列的末尾

时间:2013-10-10 05:22:13

标签: c struct sequence typedef seq

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

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

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

/**
* DESCRIPTION:  adds a new element to the "back" of
*  the seq
*
*   [2 4]
*        add_back 7
*            [2 4 7]
*
*
*/
void seq_add_back(Seq seq, ETYPE val){
NODE* endq = malloc(sizeof(NODE));
   endq->next =NULL;

   endq->prev = seq->bottom;
   endq->data = val;

   seq->bottom->next=endq;
   seq->bottom = endq;

   seq->size++;
   return;
}

我需要你的帮助来理解我的代码有什么问题。它不像应该的那样在序列末尾添加新元素。

我有另一部分代码,用于删除和添加序列前面的元素,它工作正常,也注意打印功能也很好。一切都被初始化为NULL,并且在程序开始时为零。

1 个答案:

答案 0 :(得分:0)

首先:bottom中的seq_struct指针应该启动为NULL

第二:在致电之前

seq->bottom->next=endq;
seq->bottom = endq;

您必须检查seq->bottom是否不是NULL。所以你的代码应该是这样的

if (seq->bottom != NULL)
    seq->bottom->next=endq;
seq->bottom = endq;

您必须考虑使用您的函数seq_add_back()在链接列表中插入的第一个元素。

因此,如果您要在链接列表中插入第一个元素,则必须更新seq->bottom

seq->bottom应该启动为NULL。

,您必须在函数seq_add_back()的末尾添加以下代码:

if (seq->top == NULL)
    seq->top = endq;

总结一下,你的函数应该是这样的:

void seq_add_back(Seq seq, ETYPE val){
   NODE* endq = malloc(sizeof(NODE));
   endq->next =NULL;

   endq->prev = seq->bottom;
   endq->data = val;

   if (seq->bottom != NULL)
      seq->bottom->next=endq;
   seq->bottom = endq;

   if (seq->top == NULL)
      seq->top = endq;

   seq->size++;
   return;
}