鱼C论坛

 找回密码
 立即注册
查看: 2291|回复: 5

链表c语言

[复制链接]
发表于 2020-4-4 11:05:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
将链表B接到链表A之后,不用排序,两个链表输入0就停止读入数据,我网上找了很久,都没找到靠谱一点的答案!!!求解,下面是参考的代码
#include<stdio.h>
#include<malloc.h>
void print(char *Info, struct student *Head);

int main(void)
{        
        struct student *ah, *bh;
        
        printf("创建链表A,请输入学号及成绩(均输入为0时表示停止):\n");
        ah = creat();
        printf("\n创建链表B,请输入学号及成绩(均输入为0时表示停止):\n");
        bh = creat();

        print(ah);
        print(bh);
        
        ah = merge(ah, bh);
        print("\n链表A、B合并后:", ah);
        
        return 0;
}

void print(char *Info, struct student *Head)
{
        printf("%s", Info);
        while (Head != NULL)
        {
                printf("%d,%d  ", Head->num, Head->score);
                Head = Head->next;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-4 11:09:59 | 显示全部楼层
creat();
merge(ah, bh);
print(student&);
这三个方法,如何定义的?
能否发来一看?我是初学者,我有兴趣
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-4 11:12:08 | 显示全部楼层
ah = merge(ah, bh);
可不可以理解为:
ah 增加后续长度(bh) && 深复制 bh到后续长度 && 释放 bh
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-4 11:17:01 | 显示全部楼层
howzyao 发表于 2020-4-4 11:12
ah = merge(ah, bh);
可不可以理解为:
ah 增加后续长度(bh) && 深复制 bh到后续长度 && 释放 bh

代码不完整,应该是定义结构体和函数原型
结构体是
struct Link
{
int data;
struct Link*next
};
struct Link*merge();
struct Link* creat()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-4 15:09:31 | 显示全部楼层
看到了Link结构,从字面上看来,是不是这样:
当学生0存入时,一定是:(迭代时:)
*next==NULL
所以,写入data后,(需要将学生0的Link*current=001,同时将此学生的Link*next=NULL);
------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------
按已知的 Link结构 和 应该是定义结构体和函数原型  结合思考,得出如下:
这里假设:要写入学生10人:(i==11时,for结束)
第1人时:
必然发现 *next!=NULL,存入data后,同时需要将当前学生标记为 next==i;//即i==1;
此时,只有一个条件:若next==NULL时;此只能是当前学生为最后一名学生,所以,必然地,
需要增加条件:当data!=-1时,说明当前学生还没有录入;
代码如下:
if(data>0 && next==NULL)时,学生是有效的data>=1时,自然next!=NULL;
它需要指向非NULL;所以改为:
if(data>0)时,这是当前已录入过了的学生,各种操作完毕后,只需next++即可到下一位:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-5 20:04:59 | 显示全部楼层
比方说A的最后一个节点是p,即p->next=NULL,B如果有空的头结点HeadB的话,拼接就是p->next=HeadB->next。创建还有打印也很简单啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 23:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表