include "stdio.h
时间: 2024-09-25 08:09:57 浏览: 27
#include stdio.h.md
这段代码有几个问题:
1. 在 insert 函数中,t 指针没有分配内存空间,需要使用 malloc 函数为其分配内存空间。
2. 在 insert 函数中,while 循环的判断条件应该先判断 p->next 是否为 NULL,再判断 p->next->data 是否大于 t->data,否则可能会出现访问 NULL 指针的情况。
3. 在 sort 函数中,交换 p 和 q 的数据时,应该交换 p->data 和 q->data,而不是将 p 赋值给 q->data。
4. 在 main 函数中,Initlist 函数应该传入 L 的地址,否则 L 指针不会被初始化。
5. 在 main 函数中,printf 函数的参数应该是一个格式化字符串,而不是一个 linklist 类型的指针。
6. 在 main 函数中,scanf 函数应该传入 num 的地址,否则无法读取输入的值。
7. 在 main 函数中,print 应该是 printf。
修改后的代码如下:
```
#include "stdio.h"
#include "stdlib.h"
typedef struct Node {
int data;
struct Node *next;
} *linklist;
// 插入
linklist insert(linklist L, int a) {
struct Node *t, *p;
t = (linklist)malloc(sizeof(struct Node));
t->data = a;
p = L;
while (p->next != NULL && p->next->data > t->data) {
p = p->next;
}
t->next = p->next;
p->next = t;
return L;
}
// 排序
linklist sort(linklist L) {
struct Node *p, *q;
q = L->next;
p = L->next->next;
while (q && p) {
if (p->data < q->data) {
int temp = p->data;
p->data = q->data;
q->data = temp;
}
p = p->next;
q = q->next;
}
return L;
}
void Initlist(linklist *L) {
*L = (linklist)malloc(sizeof(struct Node));
(*L)->next = NULL;
}
int main() {
linklist L, r, q, p;
Initlist(&L);
r = L;
for (int i = 0; i < 5; i++) {
q = (linklist)malloc(sizeof(struct Node));
scanf("%d", &q->data);
q->next = r->next;
r->next = q;
r = r->next;
}
int num;
printf("排序后\n");
sort(L);
for (p = L->next; p != NULL; p = p->next) {
printf("%d ", p->data);
}
printf("\n输入数\n");
scanf("%d", &num);
printf("插入后\n");
insert(L, num);
for (p = L->next; p != NULL; p = p->next) {
printf("%d ", p->data);
}
return 0;
}
```
阅读全文