【问题标题】:adding element to the end of sequence in C struct在C结构中将元素添加到序列的末尾
【发布时间】:2013-10-10 05:22:12
【问题描述】:
    #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,并在程序开始时为零。

【问题讨论】:

  • 这是正确的代码。Seq 是 struct seq_struct 的类型定义?
  • 添加代码的其他部分,可能代码的其他部分会破坏您在调用seq_add_back()函数之前调用的序列列表
  • 问:seq 是指向你的“Sequence”记录的指针吗?您没有传递副本(从未更新的副本),是吗?问:添加 first 记录会发生什么情况?一定要在调试器下单步执行 seq_add_back():也许您遇到的 ACTUAL 问题在别处。恕我直言... PS:您不需要在 void 函数中“返回”。
  • 我只看到一个缺陷:如果您传入的序列为空,则无需特殊处理。你能展示调用这个函数的程序吗?

标签: c struct sequence typedef seq


【解决方案1】:

首先:seq_struct中的bottom指针应该初始化为NULL

秒:调用之前

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

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

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

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

因此,如果 seq-&gt;bottom 是要插入链接列表的第一个元素,您也必须更新它。

seq-&gt;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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 2013-04-06
    相关资源
    最近更新 更多