qq_43412960 2020-01-03 20:29 采纳率: 76.5%
浏览 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 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1
  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合