zenghonghao 2015-12-05 15:26 采纳率: 36.4%
浏览 2251
已采纳

c++关于数组指针赋值问题

这段赋值语句

下面这段语句是错的
void setArc(char start, char end)
{
int i;
for(i=0;i<Vexnum;i++)
{

        if(vex[i].ch == start)
        {
            while(vex[i].next)
            {
                vex[i] = *vex[i].next;
            }
            ArcNode *nNode = new ArcNode;
            nNode->ch = end;
            vex[i].next = nNode;
        }
    }
}

我改了一下,变成下面这段语句,为什么执行不会出问题?
void setArc(char start, char end)
{
    int i;
    for(i=0;i<Vexnum;i++)
    {

        if(vex[i].ch == start)
        {
            ArcNode *thisnode = &vex[i];
            while(thisnode->next)
            {
                thisnode = thisnode->next;
            }
            ArcNode *nNode = new ArcNode;
            nNode->ch = end;
            thisnode->next = nNode;
        }
    }
}

源代码
#include<iostream>

using namespace std;
#define Max 100
class ArcNode{
public:
ArcNode *next;
char ch;
ArcNode()
{
next = NULL;

}

};
class List{
private:
int Bownum;
int Vexnum;
ArcNode *vex;
public:
List(int n, int k)
{
Vexnum = n;
Bownum = k;
vex = new ArcNode[Vexnum];
ArcNode *spare = new ArcNode();
int i;
for(i=0;i<n;i++)
vex[i].ch = 'A'+i;
}
void setArc(char start, char end)
{
int i;
for(i=0;i<Vexnum;i++)
{

        if(vex[i].ch == start)
        {
            ArcNode *thisnode = &vex[i];
            while(thisnode->next)
            {
                thisnode = thisnode->next;
            }
            ArcNode *nNode = new ArcNode;
            nNode->ch = end;
            thisnode->next = nNode;
        }
    }
}
void display()
{
    int i;
    for(i=0;i<Vexnum;i++)
    {
        cout<<i<<' ';
        cout<<vex[i].ch<<'-';
        ArcNode *tNode = &vex[i];
        tNode = tNode->next;
        while(tNode)
        {
            cout<<tNode->ch-'A'<<'-';
            tNode = tNode->next;
        }
        cout<<'^'<<endl;
    }
}

};
int main()
{

int t;
cin>>t;
while(t--)
{
int n, k;
cin>>n>>k;
List mylist(n, k);
while(k--)
{
char ch1, ch2;
cin>>ch1>>ch2;
mylist.setArc(ch1, ch2);

    }
    mylist.display();
}
return 0;

}

  • 写回答

4条回答 默认 最新

  • ysuwood 2015-12-06 00:18
    关注

    数组vex是存放了各个链表的头节点吧,那么在循环中vex[i] = *vex[i].next;,就把头结点的next变为结尾了,
    破坏了链表。
    第二种用的是临时指针,则不会破坏链表结构。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 如何用QDomDocument读取内容为空格的xml数据
  • ¥15 请阅读下面代码,帮我修改下代码
  • ¥15 关于#microsoft#的问题:电脑启动后不显示桌面图标和窗口,除任务栏外无法操作任何东西
  • ¥15 如何输入百度,显示本地下载的html文件页面,地址栏还显示百度的地址
  • ¥15 通过kinect制作换装程序但是服装不贴合(标签-ar)
  • ¥20 matlab如何绘制三维瀑布图
  • ¥15 关于用abap来解决动态规划的问题,但是要求输出索引值,这个是难点
  • ¥15 在ISIS中什么是IP从地址
  • ¥15 压测时,并发量过高时,响应时间出现尖刺
  • ¥15 关于vmprotect3.8.4虚拟文件一项