引发了未经处理的异常:读取访问权限冲突。求修改解惑
本帖最后由 不会代码的菜鱼 于 2022-9-19 20:12 编辑#include<stdio.h>
#include<stdlib.h>
typedef intDataType;
struct Node;
typedef struct Node *PNode;
struct Node {
DataType info;
PNode link;
};
typedef struct Node* LinkList;
LinkList createNullList_link(void) {
LinkList llist;
/*申请表头结点空间*/
llist = (LinkList)malloc(sizeof(struct Node));
if (llist != NULL) llist->link = NULL;
else printf("Out of space!\n"); /*创建失败*/
return llist;
}
int insertPost_link(LinkList llist, PNode p, DataType x) {
PNode q = (PNode)malloc(sizeof(struct Node)); /*申请新结点*/
if (q == NULL) {
printf("Out of Space!\n");
return 0;
}
else {
q->info = x;
q->link = p->link; 引发了未经处理的异常:读取访问权限冲突。
p->link = q;
return 1;
}
}
int deleteV_link(LinkList llist, DataType x) {
PNode p, q; p = llist;
if (p == NULL) return 0;
while (p->link != NULL && p->link->info != x)
p = p->link; /*找值为x的结点的前驱结点的存储位置*/
if (p->link == NULL) { /* 没找到值为x的结点*/
printf("Not exist!\n "); return 0;
}
else {
q = p->link;/* 找到值为x的结点*/
p->link = q->link;/* 删除该结点*/
free(q); return 1;
}
}
void main(void) {
LinkList m = createNullList_link();
PNode a= (PNode)malloc(sizeof(struct Node));
m = &a; //主要是将a的地址赋给m
insertPost_link(m,a,1);
while(m!= NULL){
printf("%d", m->info);
m = m->link;
}
}
代码太杂乱
m = a; 是什么意思? 能不能按照古代写法:把大括号写到一行语句的下面,一行,只写一句,写清楚? #include <stdio.h>
#include <stdlib.h>
typedef int DataType;
struct Node;
typedef struct Node *PNode;
typedef struct Node *LinkList;
struct Node {
DataType info;
PNode link;
};
LinkList createNullList_link(void) {
LinkList llist;
/*申请表头结点空间*/
llist = malloc(sizeof(*llist));
if(llist != NULL) llist->link = NULL;
else printf("Out of space!\n"); /*创建失败*/
return llist;
}
int insertPost_link(LinkList llist, PNode p, DataType x) {
PNode q = malloc(sizeof(*q)); /*申请新结点*/
if(q == NULL) {
printf("Out of Space!\n");
return 0;
} else {
q->info = x;
//q->link = p->link; // 谜之操作
q->link = NULL;
p->link = q;
return 1;
}
}
#if 0
int deleteV_link(LinkList llist, DataType x) {
PNode p, q;
p = llist;
if(p == NULL)
return 0;
while(p->link != NULL && p->link->info != x)
p = p->link; /*找值为x的结点的前驱结点的存储位置*/
if(p->link == NULL) { /* 没找到值为x的结点*/
printf("Not exist!\n ");
return 0;
} else {
q = p->link; /* 找到值为x的结点*/
p->link = q->link; /* 删除该结点*/
free(q);
return 1;
}
}
#endif
// 你是不是忘记写这个函数了?
void free_link(LinkList list) {
if(!list) return;
free_link(list->link);
free(list);
}
int main(void) {
LinkList m = createNullList_link();
//PNode a = malloc(sizeof(*a));
//m = a; // 谜之操作
PNode a = m;
insertPost_link(m, a, 1);
PNode temp = m->link;
while(temp != NULL) {
printf("%d ", temp->info);
temp = temp->link;
}
free_link(m);
puts("");
return 0;
}
ba21 发表于 2022-9-18 20:39
代码太杂乱
m = a; 是什么意思?
把a的地址赋给m,m是指针
人造人 发表于 2022-9-19 00:40
把q->link设置成null不就不能完成随意位置插入单链表吗 howzyao 发表于 2022-9-18 23:48
能不能按照古代写法:把大括号写到一行语句的下面,一行,只写一句,写清楚?
没有太乱吧,都是一行一句 人造人 发表于 2022-9-19 00:40
//q->link = p->link;
确实是这么教的 不会代码的菜鱼 发表于 2022-9-19 17:33
把q->link设置成null不就不能完成随意位置插入单链表吗
什么? 能用是能用,但和教学课件,和网上资源不一样,b站上的也是这么写的 人造人 发表于 2022-9-19 19:05
什么?
能用是能用,但和教学课件,和网上资源不一样,b站上的也是这么写的 不会代码的菜鱼 发表于 2022-9-19 20:06
能用是能用,但和教学课件,和网上资源不一样,b站上的也是这么写的
是吗?
页:
[1]