编辑:我也不会介意知道这是否只是太暧昧让你了解和或者寻找什么是错的,我一知道这与代码没有直接关系,因为当我即将退出函数时发生更改,而不是在实际的“代码”期间发生。所以我希望这已经足够,不管我是否需要添加更多。先谢谢你!指针似乎没有明显的原因重新设置
我想做一个简单的(单向)链接列表,我必须自己做,不使用STL或任何其他已经制作的动态容器。我已经做了一个简单的,但我似乎有一个问题,我根本无法包裹我的头。每当我在列表中创建一个新节点(我总是返回列表的第一个节点,以防它已被更改,我不使用“哨兵”或“虚拟”节点)新节点是好的直到我到达程序中的某个点时,它将自己重置到我介绍的第一个节点。
要尽量保持我的帖子尽可能干净,我会插入更少的代码和更多的“功能”或模式,但如果它不够,我会添加更多。
这里是它如何工作的:
我的节点项目
struct Node { // simplified example
string type; //can be ignored
int ap_nr; // I sort by apartment number
int sum; // can also be ignored
Node *next;
};
在主我初始化我的第一个节点是“假的”节点(ap_nr = -1,其他ap_nr不能为负)。
int main()
{
int command = 1; // used for loop
Node *begin; // head of my list
begin = new Node;
begin = create_node(); // initialize
while (command != 0) // This is for work with a "handler", accesses different mechanics of the program, I don't know exactly how to explain in english
{
input_command(command, begin); // reads command, sends result to handler
}
return 0;
}
这是我输入命令:
void input_command (int &command,Node *begin)
{
cout<<"Option #"; cin>>command;
input_validation (command, begin);
}
而我处理,我使用ATM的唯一部分:
void input_validation (int command, Node *begin)
{
if (command == 1 trough 15) // pseudo code
execute (command)
}
后,我将节点添加到列表中,我用调试跟踪它,第一个保持原样,但第二个节点(我在第一个节点之前添加它并返回新的“开始”),起初没关系(有一个新的内存位置和new_begin->next = old_begin
但在I退出ìnput_command
结构它重置)
* 这里是input_command结构和程序图:*
主: - 初始化 '假' 节点/进入菜单环 - >前进到input_command。
UI: - 输入命令 - >读取命令 - >验证 - >发送到处理程序。
列表: - 增加了欲望节点“列表”(没有实际上本身的列表左右,刚刚挂节点) - >返回第一个节点。 第一个节点是确定(有新的地址,在旧节点)
返回到UI: - >输入命令(下架)和复位(我的意思是,不管什么节点I添加,它成为我添加的第一个节点。假设我介绍1到10号公寓,它只记得“1”)。
AM我错过了什么?在我的设计中是否有逻辑错误? 你需要更多的代码驴吗? 只要告诉我要补充什么,我意识到这有点模糊。
注:现在我只能我的主要节点之前添加节点,我不会强调任何新的,直到我做这项工作正常,只要我的设计是不是问题的一部分,我赢了也不会改变,但如果不好,我会欣赏笔记和建议。
这是add_node功能的唯一实现部分:
Node *add_node (Node *begin,string type, int sum, int ap_nr) // Node begin e primul nod din lista, trebuie mereu plimbat cu toate functiile pe lista
{
// if first node is dummy node
if (begin->ap_nr == -1)
{
begin->type = type;
begin->ap_nr = ap_nr;
begin->sum = sum;
begin->next = 0;
return begin;
}
// else create new node and insert it in sorted position
else
{
// if node should be inserted before first node (begin)
if (ap_nr <begin->ap_nr)
{
Node *cursor;
cursor = new Node;
cursor->ap_nr = ap_nr;
cursor->type = type;
cursor->sum = sum;
cursor->next = begin;
return cursor;
}
}
请将来源添加到input_command函数中。我怀疑你没有传递对它的引用,所以开始指针永远不会被修改。 – 2012-04-02 12:03:54