qq_43412960 2020-01-03 20:29 采纳率: 78.6%
浏览 245
已采纳

这是一个关于数据结构的链表问题



#include<iostream>
#include<conio.h>
#include<string>
#include<iostream>
#include<conio.h>
using namespace std;
#define OK 1;
typedef int Status;
typedef struct 
{
string name;
float price;
}Book;
typedef  Book ElemType;
typedef struct  LNode 
{
ElemType     Elem;
LNode *Next;
}LNode,*List;
Status InitList( List &L)
{

    L=new LNode();
    L->Next=NULL;
    return OK;
}

Status Q(List &tou,int n)
{
tou=new LNode();
while(n>=0)
{

List P=new LNode();
P->Next=tou->Next;
tou->Next=P;
n--;
}
return 0;
}

int main()
{

List  tou;
Q(tou,4);


getch();


return 0;
}


我想测试链表中的前插法,Q函数就是完成的这个功能。
我的疑问是:
主函数中,Q(tou,4)表示生成一个头结点tou,后面接四个结点。
四个结点,由Q函数内容可以知道,结点名都是P。请问这样写,为什么能成功呢?
四个结点P,不就是4个重复变量了吗,变量是不能重复的啊!

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-01-03 20:45
    关注

    每次调用Q,它内部的变量都是独立的,你可以在
    List P=new LNode();
    下面加上
    printf("%p", P);
    你会看到4个不同的指针。

    再比如说
    int sum(int n)
    {
    if (n == 0) return 0;
    int p = sum(n - 1);
    return p + n;
    }
    这个代码里面的p,显然是每次调用都有一个,所以才能递归起来。
    如果是
    int p;
    int sum(int n)
    {
    if (n == 0) return 0;
    p = sum(n - 1);
    return p + n;
    }
    这么写,只有一个p了,程序肯定运行不正确。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?