1
    #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,并在程序开始时为零。

4

1 回答 1

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;
}
于 2013-10-10T05:41:42.803 回答