关于C语言链表插入数值的问题

发布网友 发布时间:2022-04-26 07:15

我来回答

5个回答

热心网友 时间:2023-10-08 21:21

你这样做,可以在插入前提前验证pos值有效性,减少无用的循环次数,比上面代码好。len可以定义成全局变量,在每次插入时累加,这样计算len的函数也可以省略。
当然上面两个函数只限于以节点个数为条件插入。如果是以节点成员值为条件插入,还是要循环比较的。(比如学生结点,在某位学生后面插入,那么就要循环比较姓名或学号)。

热心网友 时间:2023-10-08 21:21

首先,主函数中,“请输入插入的数据”那里scanf应该是&b,这是引发崩溃的原因。

其次,insert函数的目的应该是想插入数据后仍是有序链表。但你的insert函数逻辑太乱,有些不必要的判断,我修正了你的代码,贴给你看看。(虽然你insert是想保证有序,但你在创建的时候没有保证有序,所以最终结果不一定是有序。例如,创建 1,5,2,插入3,最后输出的是 1,3,5,2)

代码修改:

scanf("%d", &b);

重写了insert函数,简化逻辑;

动态分配的内存记得释放,增加freeNode释放空间

#include <stdio.h>
#include <stdlib.h>
struct link
{
int data;
struct link *next;
};
struct link *add(struct link *head);//创建链表 
void display(struct link *head);//输出数据 
struct link *insert(struct link *head, int b); //插入新节点 
void freeNode(struct link *);//释放空间
int main()
{
char c;
struct link *head = NULL;
printf("要创建一个链表吗?");
scanf(" %c", &c);
while (c == 'y' || c == 'Y')
{
head = add(head);
printf("要继续创建节点吗?");
scanf(" %c", &c);
}
display(head);
int b;
printf("输入插入的数据");
scanf("%d", &b);
head = insert(head, b);
display(head);
freeNode(head);
}
仅供参考试

热心网友 时间:2023-10-08 21:22

这种算法是不科学的,因为每次插入一个元素时,都要先计算整个链表的长度,这时时间复杂度已经是O(n)了。然后你又遍历链表找对应位置,这时的复杂度又是O(n)。所以在实际项目中这个算法的运行性能比较低,不会被采用的。

热心网友 时间:2023-10-08 21:23

定义一个结构体,结构体包括学生的姓名,学号,英语,数学,语文,平均成绩,每个结构体作为顺序链表的节点,对链表进行排序,排序算法可以用冒泡排序法,根据节点中的英语成绩进行排序,冒泡排序是要定义一个临时变量的。节点交换即可

热心网友 时间:2023-10-08 21:23

这个是画图函数可以实现,我现在接触的不多,;
函数是rectangle()函数是矩形函数,setcolor(WHILE )函数设置颜色, 其它的就这样,你试试

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com