数据结构-堆栈-PTA-6.5错题订正

本博客仅为个人错题订正以及反思,包括本人通过的代码以及错误代码和错因分析。

错误之处

首先本题要求实现三个函数,在此之中一共出现了两个错误。
第一个是在使用maloc函数时 sizeof()之中引用结构时忘记加入“struct” 导致编译错误。如图,此时为编译错误状态。

	List tmp;
	tmp=(List)malloc(sizeof(LNode));//wrong
	tmp->Data=X;

正确的:

	List tmp;
	tmp=(List)malloc(sizeof(struct LNode));//right
	tmp->Data=X;

第二个错误之处是缺少对于特殊位置P==NULL的考虑,即此时为尾插,符合题目的要求,一开始没有考虑到。在修改过程中出现的问题是插入新的节点tmp,然而自己写成了在尾节点后插入P,忘记了插入的功能。
wrong:

            pre->Next=P;
			P->Next=NULL;//违法
			return L;

right:

			pre->Next=tmp;//将需要插入的节点插入
			tmp->Next=P;
			return L;

通过的函数

Position Find( List L, ElementType X )
{//返回线性表中首次出现X的位置。若找不到则返回ERROR; 
    List l=L;
    while(l!=NULL&&l->Data!=X)
        l=l->Next;
    if(l==NULL)
        return ERROR;
    else
        return l;
}
List Insert( List L, ElementType X, Position P )
{//将X插入在位置P指向的结点之前,返回链表的表头。
 //如果参数P指向非法位置,则打印“Wrong Position for Insertion”,返回ERROR;
	List tmp;
	tmp=(List)malloc(sizeof(struct LNode));//wrong
	tmp->Data=X;
	if(L==P){//表头
		tmp->Next=P;
		return tmp;
	}
	else{//其他部分
		List l=L;
		List pre=l;
		while(l!=NULL&&l!=P){//找到P以及前一个位置pre
			pre=l;
			l=l->Next;
		}
		if(l==NULL){//末尾
			if(P!=NULL){
				printf("Wrong Position for Insertion\n");
			    return ERROR;
			}
			else{
				pre->Next=tmp;
				tmp->Next=NULL;
				return L;
			}    
		}
		else{//中间
			pre->Next=tmp;
			tmp->Next=P;
			return L;
		}
	}	
}
List Delete( List L, Position P )
{
	if(L==P){//表头
		L=L->Next;
		free(P);
		return L;
	}
	else{
		List l=L;
		List pre=l;
		while(l!=NULL&&l!=P){
			pre=l;
			l=l->Next;
		}
		if(l==NULL){
			printf("Wrong Position for Deletion\n");
			return ERROR;
		}
		else{
			pre->Next=P->Next;
			free(P);
			return L;
		}
	}	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值