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;
}
4

2 回答 2

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];if 条件失败,但 cout 将始终执行。

不过,更广泛的问题与超出范围的数组索引有关。你看不到汤姆,因为你的堆栈溢出了。这里的问题是你stkptrlink[stkptr]在你的 cout 之前。当i == 3您将拥有:

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

您必须重组程序,以便stkptr在任何数组查找后设置为 99,并且您必须添加更多逻辑以" and is linked to "...在查看 Tom 时不计算整体,因为他没有与任何人链接。

于 2013-02-21T15:50:49.983 回答
1

您的链接设置不正确。

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

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

提示:您的列表为:0 -> 1 -> 2 -> 99,仅显示有效节点 0、1、2。

提示2:用笔和纸画出来。

If you like this answer, click the check mark next to it.

于 2013-02-21T16:00:39.017 回答