发布网友 发布时间: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 )函数设置颜色, 其它的就这样,你试试