一个小单链表代码问题
structslist
{double s;
struct slist*next;
};
typedefstruct slistSTREC;
doublefun( STREC *h)
{
double max=h->s;
while(h!=NULL)
{
if(max<h->s)
max=h->s;
h=h->next;
}
return max;
}
这是一个 寻找带头结点的单链表中寻找 数据最高方法
为什么在fun 方法里面, 一开始让最大值是 h->s,h是头指针, h->s 是头结点的 数据? 头结点的数据 不是没有嘛?
寻求大佬的帮助! 姐姐,您有 C 的基础吗?结构体与其指针是相同的 *L == L (地址),但用法不一样。这里是要寻找,没有必要去复制一笔资料再来比大小,直接遍历就可以了,所以用指针的方式
structslist
{
double s;
struct slist*next;
};
typedefstruct slistSTREC;
doublefun( STREC *h )
{
double max=h->s; // h->s >> max = h 的资料,因为 s 是 double 型的资料
while(h!=NULL) // 这是遍历/搜索的写法:如果指针不是指向 NULL(尾端),继续循环
{
if(max<h->s) // 如果在寻找过程发现新的资料 s 比目前 max 所记录的值来得大
max=h->s; // 更新记录,max = h 的 s
h=h->next; // h 指向下一个元素
}
return max; // 上面找完所以元素了,把最大值返回
}
加入适当的空格,方便阅读
那边最好这样写
if(max<h->s) //如果在寻找过程发现新的资料 s 比
{
max=h->s;
} claws0n 发表于 2018-8-12 12:53
姐姐,您有 C 的基础吗?结构体与其指针是相同的 *L == L (地址),但用法不一样。这里是要寻找,没有必要 ...
有C语言基础,但学的不好
我知道 *h 是指针, 是链表中的头指针.在该链表有头结点
h->s 我也知道 s 是结点中 double 的数据.
1.但 h->s 的指向的是哪个结点中的数据吗?是头结点的数据(头结点的数据域不是一般不设置吗)?
2.为什么先让它为 最大值进行操作的?? 仅有的倔强 发表于 2018-8-12 16:24
有C语言基础,但学的不好
我知道 *h 是指针, 是链表中的头指针.在该链表有头结点
没有人敢说学得好吧{:10_329:}
姐姐在看小甲鱼老师的视频?小甲鱼老师在(C)讲指针的时候,一开始还好,到后面的时候就乱了{:5_99:}
到数据结构的时候就更不负责任了{:10_278:}
建议不要看到箭头就说指去这里那里,吧【 -> 】看成【的】就清楚多了。h 的 s == h 目前的资料(double s)
1. 以开始是头结点没错,跟 p 一样,之后就不是了,因为 h = h->next // h 被赋值为 h 的下一个(指针 *next)
2. 你要找最大值,所以必须定义。一开始是头结点,头结点的资料一般是 NULL,加入 return NULL,说明这是空链表。
假设说这不是空链表,那么头结点肯定不会指向 NULL,所以 while(h!=NULL) 将进入循环,直到最后一个元素。这个过程用 if() 判断,把链表中的最大元素给找出来 哎 带头结点的链表 头结点是自己定义的,我的理解就是头结点的数据部分是无用的,因为头结点的作用应该是拿来指向"第一个"“数据有用”的指针。比如p0,p1,p2都是链表指针,你把数据从p1开始存储,那p0的next指向p1,p0就是头指针。 嗯嗯嗯 对 在看小甲鱼的学习视频
我还看小甲鱼的 数据结构,看到链表这里我就卡主了,一直纠结你给我解决的问题,
然后要考C语言二级,做题呢。 又碰到现在这个让我转不过来弯的问题拉
我太笨了呜呜呜呜呜...
1.恩 我同意你说的 ,要找最大值,要必须定义。 所以 题目说 max=h->s;
2. 然后 h->s, 然而 我还是不懂你说的 h的s 就是目前的 s. 头指针的数据域 没有值吧 ??{:5_99:}
我还是不自动 max等于多少呢
下面是main函数里的东东西,题目只让写fun(h)方法;
void main()
{
doubles={85,76,69,85,91,72,64,87}, max;void NONO ();
STREC*h;
h=creat( s ); outlist(h);
max=fun( h );
printf("max=%6.1f\n",max);
NONO();
}
lvvly 发表于 2018-8-12 17:04
哎 带头结点的链表 头结点是自己定义的,我的理解就是头结点的数据部分是无用的,因为头结点的作用应该是拿 ...
恩恩谢谢你来解决我的问题
现在我迷惑的地方是, h是头指针, 而h->s =? 一开始是 头结点中的 数据吗,但是和之前 头结点的数据 是无用的 不矛盾吗
我不知道我理解的对不对,头结点我是这么理解的:
h0,h1,h2,h3……hn
按照你的要求 寻找带头结点的单链表中寻找 数据最高方法
既然是带头结点的 那你的数据就应该放在g1,g2,g3……gn 中
比如你在 1 2 3 4 5 6 ……n 中找最大的,那么被找的这些数据就是存储在h1,h2,h3……里面
你声明结点的时候,h1->s=1,h2->s=2……
h0->s 因为h0是头结点,你可以随意设置h0->s 头结点的数据对你来说无意义 如果你没有对h0->s初始化,那么h0->s就是不确定的值 但是h0->s对你的问题没用,因为你找的数是从p1开始存储的
p0->next就是p1
你的代码中max=h->s因为是带头结点的,h是头结点那么h->s它的值是不确定的
max=h->next->s
h->next->s才是h1的值,你存储数据的开始。
我的理解
lvvly 发表于 2018-8-12 17:43
我不知道我理解的对不对,头结点我是这么理解的:
h0,h1,h2,h3……hn
按照你的要求 寻找带头结点的单链表 ...
谢谢你 , 我看懂了 一开始的理解和你相同
我上面发的代码是 答案给的 。 所以我很纳闷 来讯问哒
还是很谢谢 你 辛苦了{:5_106:} 仅有的倔强 发表于 2018-8-12 18:26
谢谢你 , 我看懂了 一开始的理解和你相同
我上面发的代码是 答案给的 。 所以我很纳闷 来讯问哒
为什么要max=h->s啊?,直接max=h->next->s就行了。
而且一般情况下不会用h=h->next的吧,而是新建一个指针p,用p指向h,之后移动p指针的吧?h是头指针,把头指针移动了不会对链表本身造成影响吗?
页:
[1]