【数据结构】c语言中Attach()意义

枇杷鹭 2019-09-21 11:02:55
下面是不太带结点链表实现多项式相加的一部分c代码:

struct PolyNode
{
int coef; // 系数
int expon; // 指数
struct PolyNode *link; // 指向下一节点的指针
};
typedef struct PolyNode *Polynomial;
Polynomial P1, P2;

Polynomial PolyAdd(Polynomial P1, Polynomial P2)
{
Polynomial front, rear, temp;
int sum;
rear = (Polynomial)malloc(sizeof(struct PolyNode));
front = rear;
while (P1 && P2)
{
switch (Compare(P1->expon, P2->expon))
{
case 1:
Attach(P1->coef, P1->expon, &rear);
// Attach()将系数、指数形成新的项,拷贝到rear的后面
P1 = P1->link;
break;
case -1:
Attach(P2->coef, P2->expon, &rear);
P2 = P2->link;
case 0:
sum = P1->coef + P2->coef;
if (sum)
Attach(sum, P1->expon, &rear);
P1 = P1->link;
P2 = P2->link;
break;
}

}
}


Attach(P1->coef, P1->expon, &rear);这句没有看懂,求解~

另,有什么c库的官网么,在搜索引擎上没有查到Attach()的解释
...全文
2116 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
浙大陈越数据结构课 哈哈哈哈哈哈我也刚刷到这里
枇杷鹭 2020-02-19
  • 打赏
  • 举报
回复
引用 4 楼 weixin_41580386 的回复:
请问你知不知道Attach函数为什么不能这样定义? void Attach(int c, int e, Polynomial  pRear){     Polynomial P;          P = (Polynomial)malloc(sizeof(struct PolyNode));     P->coef=c;     P->expon=e;     P->link = NULL;     pRear->link = P;     pRear=P; } 然后在主函数里引用Attach函数时这样写 Attach(P1->coef, P1->expon, rear); 这样为什么就是错的呢,很疑惑
你好,我的理解是: (1)首先明确`pRear`是一个指针,指向一个结点,那`pRear`本身就是一个地址变量; (2)其次,明确C中都是传值调用。 在你的Attach(P1->coef, P1->expon, rear)中:

pRear->link = P;
// 这句话本身是没有问题的,可以对 link 进行赋值
pRear=P;
// 但是这句话就不能起到赋值的效果,因为:
// 0. 调用 Attach(P1->coef, P1->expon, rear) 时,将rear的值(因为`rear`是一个指针,所以其值是一个地址变量)赋值一份,给局部变量pRear赋上
// 1. 此时 pRear 中保存地址变量,但其本身并不是指向 *rear 的指针;
// 2. 换句话说,如果 pRear 的值改变,那么不对 rear 造成影响。
// 3. 因此,想要改变 rear 的值,应该将 rear 的地址传入,而非将其本身。
总结起来就是: A 是 B 的指针,B 是 C 的指针,在函数调用中,想改变C的值,需要将&C(即B)传入,想改变B的值,需要将&B(即A)传入。 函数调用中,改变变量的值,对其指针进行操作;改变指针的值,对指针的指针进行操作。
edger_wx 2020-02-18
  • 打赏
  • 举报
回复
请问你知不知道Attach函数为什么不能这样定义?
void Attach(int c, int e, Polynomial  pRear){
    Polynomial P;
    
    P = (Polynomial)malloc(sizeof(struct PolyNode));
    P->coef=c;
    P->expon=e;
    P->link = NULL;
    pRear->link = P;
    pRear=P;
}
然后在主函数里引用Attach函数时这样写
Attach(P1->coef, P1->expon, rear);
这样为什么就是错的呢,很疑惑
铖邑 2019-09-24
  • 打赏
  • 举报
回复 1
自带函数都是小写字母打头的
枇杷鹭 2019-09-21
  • 打赏
  • 举报
回复 2
引用 1 楼 wowpH 的回复:
网上搜不到,那可能是自定义函数。。。。你没copy全?
您说对了,我以为Attach像Compare一样是自带函数,刚遇到就把课程暂停一个劲研究... 老师确实在下一页ppt马上讲了Attach()的定义。

void Attach(int c, int e, Polynomial *pRear){
    Polynomial P;
    
    P = (Polynomial)malloc(sizeof(struct PolyNode));
    P->coef=c;
    P->expon=e;
    P->link = NULL;
    (*pRear)->link = P;
    *pRear=P;
}
wowpH 2019-09-21
  • 打赏
  • 举报
回复 1
网上搜不到,那可能是自定义函数。。。。你没copy全?
主讲老师hwdong具有几十年211某大学的数据结构课程教材经验,是该校第一批精品课程的数据结构课程的主持人。hwdong在课程教学上不同于一般的讲师,擅长深入浅出、化难为易,使难懂的概念、原理或算法变得简单易懂。在生活节奏如此快的紧张生活,故意废话啰嗦忽悠浪费别人时间、谋财害命,hwdong的教学风格就是全程干货无废话、在尽可能短的时间里输出最可能多的干活,在youtube(频道hwdong)、B站(hw-dong)的课程深受广大网友的喜欢和好评,大家可以去观看评论。《数据结构》是计算机学科的主干基础课,主要介绍基本的数据结构、典型算法及其应用。该课程是计算机专业最重要的承前启后的核心课程,它既提供编写规范的程序的理论基础和实践指导,又是进一步学习其他如操作系统、编译原理、软件工程、人工智能、计算机网络等软硬件课程的基础,是开发各种软件、研究算法的最核心基础。熟悉数据结构是合格程序员的基本内功,从硅谷的google、facebook等到国内的BAT企业招聘软件算法人员的面试题几乎都是数据结构与算法。本课程包括:线性表、栈和队列、字符串、多维数组、树和二叉树、图、查找、优先队列和堆、排序等,还将包括面向考研和求职面试的数据结构刷题。课程特点:化难为易,使复杂难懂的问题变得简单易懂。用动画演示执代码过程,避免空洞的讲解,原理和代码实现结合,避免大多数教学只讲原理不知实现的通病。内容丰富,无废话和抖机灵,直指核心。课程内容将长期更新,力求精益求精。  

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧