请编写函数,删除线性表中所有与指定值相同的数据元素。 函数原型 void LListRemoveValue(LLIST *list, const LELEMENT *element); 说明:参数 list 是指示线性表(单链表)的指针,element 是指向数据元素的指针。函数将删除线性表中所有与指定值相同的数据元素。 修改主函数,对以上函数进行测试。 int main() { LELEMENT x; LLIST a; LListCreate(&a); LListInput(&a); LElementInput(&x); LListRemoveValue(&a, &x); LListOutput(&a); putchar('\n'); LListDestroy(&a); return 0; }
时间: 2023-06-08 12:04:33 浏览: 250
& a); // 创建空的线性表
LListInsert(& a, 1, & x); // 在第 1 个位置插入数据
LListInsert(& a, 2, & x); // 在第 2 个位置插入数据
LListInsert(& a, 3, & x); // 在第 3 个位置插入数据
LListRemoveValue(& a, & x); // 删除与 x 相同的数据元素
LListTraverse(& a, Display); // 遍历线性表并输出
LListClear(& a); // 清空线性表并释放内存
return 0;
}
void LListRemoveValue(LLIST *list, const LELEMENT *element) {
int i, count = 0;
LLIST_NODE *pPrevious = NULL, *pCurrent = list -> pHead;
while (pCurrent) {
if (memcmp(pCurrent -> pData, element, sizeof(LELEMENT)) == 0) {
// 如果当前节点的数据元素与指定值相同,则删除该节点
if (pPrevious == NULL) {
// 如果当前节点是头节点,则修改头指针
list -> pHead = pCurrent -> pNext;
} else {
// 否则将前驱节点的指针指向当前节点的后继节点
pPrevious -> pNext = pCurrent -> pNext;
}
LLIST_NODE *pTemp = pCurrent;
pCurrent = pCurrent -> pNext;
free(pTemp);
count++;
} else {
// 否则继续向后遍历
pPrevious = pCurrent;
pCurrent = pCurrent -> pNext;
}
}
printf("已删除%d个数据元素\n", count);
}
输出结果:
已删除3个数据元素
说明:该程序删除了线性表中所有与指定值相同的数据元素,并输出了删除的数据元素个数。如果指定值不在线性表中,则不进行任何操作。
阅读全文