关于链表的指针问题
Pointer questions regarding linked lists
好吧,伙计们,所以我一直在做一个链表程序,遇到了一个问题。我正在尝试以排序的方式将一段数据放入已经排序的链表中。现在,我正在比较用户给出的指针数据(data*newData(和头(LinkNode*current=head(,我知道这就是我的程序失败的地方。我知道我必须比较实际值,而不是内存地址,但我不确定该怎么做。有人有什么建议或想法吗?
谢谢。
void addSorted(Data * newData)
{
if(head == NULL)
{
head = new LinkNode(newData);
return;
}
LinkNode * current = head;
LinkNode * previous = NULL;
while(current != NULL)
{
if(newData->compareTo(current->data) == -1)
{
LinkNode * newNode = new LinkNode(newData);
newNode->next = current;
if(previous == NULL)
{
current->next = newNode;
}
else
{
newNode->next = previous->next;
previous->next = newNode;
}
return;
}
previous = current;
current = current->next;
}
previous->next = new LinkNode(newData);
}
简单
if(*newData < (*current->data))
假设运算符<对于数据类型过载
提供std::less<>的最低惯用方法服从弱总排序(I.o.w.实现运算符<(:
struct Data
{
int id;
std::string other;
// details omitted
bool operator<(const Data& b) const
{
if (id < rhs.id)
return true;
if (id > ths.id)
return false;
return (other < b.other);
}
};
如果你有一个大/复杂的结构,并且所有参与的成员都为他们的类型定义了比较,你可以用TR1、Boost或C++11元组来完成这个巧妙的技巧:
#include <tuple>
// ...
bool operator<(const Data& b) const
{
return std::tie(id,other)< std::tie(b.id,b.other);
}
在while循环中,您正在将newData(一个指针(与"current->data"(我想是整数(进行比较?
即如果(newData<current->data(
您可以使用memcmp来比较数据
if(newData < current->data)
应该是
if(*newData < current->data)
我想。如果不存在运算符<,实现它或者使用慢速memcmp。
此外,如果这是一个实用的代码(为什么不使用stl?(,请考虑使用跳过列表——它们会更快。
PS:运营商是一个强大的功能,请毫不犹豫地使用它们。
相关文章:
- 链表指针问题
- 指针问题:从不兼容的类型"int"分配给"int *"
- C++指针问题:如何修复这些代码中的错误?
- *++*++ppp,*++pp[1],*++(*(1+ppp)有什么具体的区别吗?(C/C++指针问题)
- C++ 入门加列表:10.9 "顶部"指针问题
- C++ 指针问题 - 通过方法更新指针
- 未分配正在释放的指针 - 指针问题
- 双指针问题通过函数传递错误
- 在C++中实现图形 DFS,指针问题
- 返回指针问题
- C++ - 有人有分析指针到指针问题的技巧吗?
- 选择排序指针问题
- 涉及删除操作的 C++ 指针问题
- 模板类指针问题 c++
- Swig和指针问题(python)
- 引用指针问题
- 函数指针问题
- 通过类型C++ 的继承树递归导致此指针问题
- 无法将文件读入字符数组(像往常一样,某些指针问题)
- 结构中的指针问题