我被困在一个自定义链表上

时间:2013-02-21 15:22:59

标签: c++ arrays

我应该在不使用结构而只使用数组的情况下制作链表。一切都像教师想要的那样工作,除了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 个答案:

答案 0 :(得分:1)

没有人评论你的else语句需要括号我认为解决了else只会执行后面的第一行的事实。所以,

else
    stkptr = link[stkptr];
    cout<<names[i]<<" is in position "<<position[stkptr]<<" and is linked to "<<names[stkptr]<<endl;
如果条件失败,

将仅执行stkptr = link[stkptr];,但cout将始终执行。

更广泛的问题与一个越界的数组索引有关。你没有看到汤姆,因为你的堆栈溢出。这里的问题是您在cout之前将stkptr设置为link[stkptr]。当您i == 3时:

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

您必须重新构建程序,以便在任何数组查找后将stkptr设置为99,并且当您查看Tom时,您必须添加更多逻辑以不对整个" and is linked to "...进行cout,因为他没有与任何人联系。

答案 1 :(得分:1)

您的链接设置不正确。

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

您想将99移至最后一个有效链接之后。

提示:你的清单是:0 - &gt; 1 - &gt; 2 - &gt; 99,仅显示有效节点0,1,2。

提示2:用笔和纸画画。

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

相关问题