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 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器