user-0 提问: 小白求助

回复:
user: user-0
content: struct Node; typedef struct Node *PtrToNode; typedef PtrToNode List; typedef PtrToNode Position; typedef int ElementType; struct Node {     ElementType Element;     Position Next; }; //创建链表   List CreateList(); //遍历链表   void TraverseList(List L); //清空链表   List MakeEmpty(List L); //判断给定列表是否为空   int IsEmpty(List L); //判断节点在给定链表中是否为空   int IsLast(Position P, List L); //在指定的链表中查找给定元素。   //存在则返回其第一次出现的位置，不存在则返回NULL   Position Find(ElementType X, List L); //删除链表中的某个元素   void Delete(ElementType X, List L); //在指定链表中查找给定元素的前驱节点   Position FindPrevious(ElementType X, List L); //在链表给定位置的后面插入元素   void Insert(ElementType X, List L, Position P); //删除链表   void DeleteList(List L); //返回链表的头结点   Position Header(List L); //返回链表第一个数据元素节点   Position First(List L); //返回当前位置的下一个位置   Position Advance(Position P); //获取当前位置元素的值   ElementType Retrive(Position P); int IsEmpty(List L) {     return L->Next == NULL;  //你写的这个地方又报错了 } //想要实现的功能和函数名的意思不太一致 int IsLast(Position P, List L)//判断节点在给定链表中是否为空   {     //return P->Next == NULL;     if (NULL == P) return 0;     PtrToNode q = L->Next;     while (q)     {         if (P == q) return 1;         q = q->Next;     }     return 0; } Position Find(ElementType X, List L) {     Position P = L->Next;     while (P != NULL && P->Element != X)     {         P = P->Next;     }     return P; } void Delete(ElementType X, List L) {     Position P, TmpCell;     P = FindPrevious(X, L);     if (!IsLast(P, L))     {         TmpCell = P->Next;         P->Next = TmpCell->Next;         free(TmpCell);     } } Position FindPrevious(ElementType X, List L) {     Position P = L;     while (P->Next != NULL && P->Next->Element != X)     {         P = P->Next;     }     return P; } void Insert(ElementType X, List L, Position P) {     Position TmpCell;     //TmpCell = malloc(sizeof(struct Node));    //————这个地方老报错怎么回事？     TmpCell = (PtrToNode)malloc(sizeof(struct Node));    //在有些编译器下，需要这样     if (TmpCell == NULL)     {         printf("Out of space!\n");         return;     }     TmpCell->Element = X;     TmpCell->Next = P->Next;     P->Next = TmpCell; } void DeleteList(List L) {     Position P, Tmp;     P = L->Next;     L->Next = NULL;     while (P != NULL)     {         Tmp = P->Next;         free(P);         P = Tmp;     } } Position Header(List L) {     return L; } Position First(List L) {     return L->Next; } Position Advance(Position P) {     return P->Next; } ElementType Retrive(Position P) {     return P->Element; } List CreateList() {     int i;     Position P, Tmp;     List L = malloc(sizeof(struct Node));     P = L;     for (i = 0; i < 5; i++)     {         Tmp = malloc(sizeof(struct Node));         Tmp->Element = i;         P->Next = Tmp;         P = Tmp;     }     P->Next = NULL;     return L; } void TraverseList(List L) {     Position P;     P = L->Next;     while (P != NULL)     {         printf("%d\n", P->Element);         P = P->Next;     } } int main(void) {     //创建链表       List L = CreateList();     //查找元素1在链表中的位置       Position P = Find(1, L);     //在元素1后面插入元素8       Insert(8, L, P);     //查找元素8前驱结点       P = FindPrevious(8, L);     //遍历链表       TraverseList(L);     return 0; }

user: user-1
content: 修改如下：   struct Node; typedef struct Node *PtrToNode; typedef PtrToNode List; typedef PtrToNode Position; typedef int ElementType; struct Node { 	ElementType Element; 	Position Next; }; //创建链表   List CreateList(); //遍历链表   void TraverseList(List L); //清空链表   List MakeEmpty(List L); //判断给定列表是否为空   int IsEmpty(List L); //判断节点在给定链表中是否为空   int IsLast(Position P, List L); //在指定的链表中查找给定元素。   //存在则返回其第一次出现的位置，不存在则返回NULL   Position Find(ElementType X, List L); //删除链表中的某个元素   void Delete(ElementType X, List L); //在指定链表中查找给定元素的前驱节点   Position FindPrevious(ElementType X, List L); //在链表给定位置的后面插入元素   void Insert(ElementType X, List L, Position P); //删除链表   void DeleteList(List L); //返回链表的头结点   Position Header(List L); //返回链表第一个数据元素节点   Position First(List L); //返回当前位置的下一个位置   Position Advance(Position P); //获取当前位置元素的值   ElementType Retrive(Position P); int IsEmpty(List L) { 	return L->Next == NULL; } //想要实现的功能和函数名的意思不太一致 int IsLast(Position P, List L)//判断节点在给定链表中是否为空   { 	//return P->Next == NULL; 	if (NULL == P) return 0; 	PtrToNode q = L->Next; 	while (q) 	{ 		if (P == q) return 1; 		q = q->Next; 	} 	return 0; } Position Find(ElementType X, List L) { 	Position P = L->Next; 	while (P != NULL && P->Element != X) 	{ 		P = P->Next; 	} 	return P; } void Delete(ElementType X, List L) { 	Position P, TmpCell; 	P = FindPrevious(X, L); 	if (!IsLast(P, L)) 	{ 		TmpCell = P->Next; 		P->Next = TmpCell->Next; 		free(TmpCell); 	} } Position FindPrevious(ElementType X, List L) { 	Position P = L; 	while (P->Next != NULL && P->Next->Element != X) 	{ 		P = P->Next; 	} 	return P; } void Insert(ElementType X, List L, Position P) { 	Position TmpCell; 	//TmpCell = malloc(sizeof(struct Node));    //————这个地方老报错怎么回事？ 	TmpCell = (PtrToNode)malloc(sizeof(struct Node));    //在有些编译器下，需要这样 	if (TmpCell == NULL) 	{ 		printf("Out of space!\n"); 		return; 	} 	TmpCell->Element = X; 	TmpCell->Next = P->Next; 	P->Next = TmpCell; } void DeleteList(List L) { 	Position P, Tmp; 	P = L->Next; 	L->Next = NULL; 	while (P != NULL) 	{ 		Tmp = P->Next; 		free(P); 		P = Tmp; 	} } Position Header(List L) { 	return L; } Position First(List L) { 	return L->Next; } Position Advance(Position P) { 	return P->Next; } ElementType Retrive(Position P) { 	return P->Element; } List CreateList() { 	int i; 	Position P, Tmp; 	List L = malloc(sizeof(struct Node)); 	P = L; 	for (i = 0; i < 5; i++) 	{ 		Tmp = malloc(sizeof(struct Node)); 		Tmp->Element = i; 		P->Next = Tmp; 		P = Tmp; 	} 	P->Next = NULL; 	return L; } void TraverseList(List L) { 	Position P; 	P = L->Next; 	while (P != NULL) 	{ 		printf("%d\n", P->Element); 		P = P->Next; 	} } int main(void) { 	//创建链表   	List L = CreateList(); 	//查找元素1在链表中的位置   	Position P = Find(1, L); 	//在元素1后面插入元素8   	Insert(8, L, P); 	//查找元素8前驱结点   	P = FindPrevious(8, L); 	//遍历链表   	TraverseList(L); 	return 0; }

user: user-2
content: TmpCell = (Position)malloc(sizeof(struct Node));

user: user-3
content: TmpCell = (Position)malloc(sizeof(struct Node)); 加个强制类型转换

user: user-0
content: 还是不对，麻烦再来人看看

user: user-4
content: struct 去掉试试