你好,
我已经尝试了12个小时来调试我的循环链表问题。该函数接收一个抽象数据类型(ADT),其中包含一个起始位置和光标字段。初始虚拟单元格指向自己。插入元素,不允许重复元素。
int setInsertElementSorted(setADT buffer, setElementT E)
{
bool isUnique = true;
cellT *previous;
previous = buffer->start;
buffer->cursor = buffer->start->next;
while(buffer->cursor != buffer->start){
if(buffer->cursor->value == E){
isUnique = false;
} else if(E < buffer->cursor->value)
break;
else {
previous = buffer->cursor;
buffer->cursor = buffer->cursor->next;
}
}
if(isUnique != false){
cellT *newNode = malloc(sizeof(cellT));
newNode->value = E;
previous->next = newNode;
newNode->next = buffer->cursor;
buffer->count++;
return (buffer->count);
}
}
代码接收一系列整数,然后将它们排序到LL参数中。这个代码应该用于一个集合(因此没有重复条目)。
输入9、8、7、6、5、4、3、2、1的输出是3、4、5、6、7、8和9(前两个值怎么了?)。
当输入7、3、5、1、9、2等内容时,输出只有7和9(所以它无法处理间隔大于1的值... o.O)。 附加信息:
typedef struct cellT {
int value;
struct cellT *next;
} cellT;
struct setCDT{
int count;
cellT *start;
cellT *cursor;
};
setADT setNew()
{
setADT newNode = malloc(sizeof(struct setCDT));
newNode->start = newNode->cursor = malloc(sizeof(cellT));
newNode->start->next = newNode->cursor->next = newNode->start;
newNode->count = 0;
return (newNode);
}
setADT是指向setCDT的指针类型。但是,setElementT只是一个简单的int类型。对于这种模糊不清的表述,我们表示歉意。
New
可能是一个自定义函数,在 C 中该单词并不是保留字。 - ArkkusetElementT
和setADT
是指针吗?注意:不要使用typedef隐藏指针!这是灾难的完美配方。对于bool
:使用stdbool.h
而不是自定义类型。这会产生糟糕的影响,而标准布尔类型(自C99以来)则没有这些问题。另外,在C中有效,但使用C++关键字不是一个好主意,因为您可能稍后会迁移到C++或使用带有“extern“C” ”的C++库。 - too honest for this site