试编写在带头结点的单链表上实现线性表基本运算定位和删除的算法。
试编写在带头结点的单链表上实现线性表基本运算定位和删除的算法。
【正确答案】:(1)定位 在带头结点的单链表上实现的算法为: int l_ocateLiklis(LinkListhead,Data Type x) //求表head中第一个值等于x的结点的序号,若不存在这种结点,返回结果为O { Node* P=head; //p是工作指针 P=P一>next; //初始时P指向首结点 int i=0; //i代表结点的序号,这里置初值为0 while(p!=NULI&&p一>data!=x) //访问链表 {i++; P=P一>next; } if(P!=NULL) retum i+1; else return 0; } (2)删除 在带头结点的单链表上实现的算法为: void DeleteLinklist(LinkList head,int i) //删除表head的第i个结点 { Node*q; if(i==o)q=head; else q=GetLinklist(head,i一1) //先找待删结点的直接前驱 if(q!==NUI_L&&q一>next!=NULL) //若直接前驱存在且待删结点存在 { p=q一>next; //p指向待删结点 q一>next=P一>next; //移出待删结点 free(P); //释放已移出结点P的空间 } else exit(“找不到要删除的结点"); //结点不存在 }
Top