2013-02-21 46 views
0

我应该在不使用结构的情况下创建一个链表,只是数组。除了Tom应该是列表的结尾,并且需要显示if语句之外,所有内容都可以像教师希望的那样工作。这是我无法工作的唯一的事情。先谢谢您的帮助。我被困在一个自定义链表上

#include<iostream> 
#include<string> 
using namespace std; 

int main() 
{ 
    int position[10] = {0,1,2,3,4,5,6,7,8,9}; 
    string names[10] = {"dick", "Harry", "Sam", "Tom"}; 
    int link[10] = {1, 2, 3, 99, 5, 6, 7, 8, 9, 10, }; 
    int stkptr = 0; 

    for(int i = 0; i < 10; i++) 
    { 
     if(stkptr == 99) 
      cout<<"You have reached the end of the list."<<endl; 
     else 
      stkptr = link[stkptr]; 
     cout << names[i] << " is in position " 
      <<position[stkptr] << " and is linked to " << names[stkptr] << endl; 
    } 
    return 0; 
} 
+2

你的格式化建议你想'cout << ...'也在else分支中。如果是这样,你将不得不像'else {sktptr ... names [stkptr] << endl;'''一样将整个分支放在'{}'中。 – Nobody 2013-02-21 15:26:56

+0

感谢您的帮助..有什么帮助?你对编程语言有什么疑问? – 2013-02-21 15:30:30

+0

@LightnessRacesinOrbit前3个名字显示所有应有的样子。一旦显示Tom,我需要在if语句中显示cout。到目前为止,我无法展示 – Dorden 2013-02-21 15:46:34

回答

1

您的链接设置不正确。

link[3]的99表示没有在列表中没有第4节点,只有3

你想在您上次有效链接移动99。

提示:你的例子不胜枚举:0 - > 1 - > 2 - > 99,仅示出有效节点0,1,2

提示2:使用笔和纸绘制它。

如果您喜欢该答复,请点击旁边的复选标记。

1

没有人对你的else语句需要括号的评论我认为这个事实只会执行下面的第一行。所以,

else 
    stkptr = link[stkptr]; 
    cout<<names[i]<<" is in position "<<position[stkptr]<<" and is linked to "<<names[stkptr]<<endl; 

只会执行stkptr = link[stkptr];如果条件失败,但COUT总是会被执行。

更广泛的问题虽然与超出数组索引有关。你不会去看Tom,因为你的堆栈溢出了。这里的问题是你在cout之前将stkptr设置为link[stkptr]。当i == 3你将有:

cout<<names[3]<<" is in position "<<position[99]<<" and is linked to "<<names[99]<<endl; 

你必须调整计划,所以你任何阵列查找后设置stkptr到99,你必须添加一些更多的逻辑不清点整个" and is linked to "...当你在看汤姆,因为他没有与任何人联系。