#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,并且在程序开始时为零。
答案 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;
}