示例:利用单链表的基本运算 ,求A-B。即若单链表B中的元素出现在单链表A中,则从A中删除该元素

题目:利用单链表的基本运算 ,求A-B。即若单链表B中的元素出现在单链表A中,则从A中删除该元素

分析:对于单链表A中的每个元素e,在单链表B中进行查找,如果在B中存在与A中相同的元素,则将元素从A中删除

算法实现

/** 算法描述:*/
/** A-B算法的实现  */
void DeleteElement(LinkList A, LinkList B) {
    int position;
    DataType e;
    ListNode *p;
    /** 取出链表B中的每个元素与单链表A中的元素比较,如果相等则删除A中所对应的节点  */
    for (int i = 1; i <= ListLenght(B); ++i) {
        p = Get(B, i);     //取出B中的节点,将指针返回给p
        if (p) {
            position = LocatePos(A, p->date);  //比较B中的元素是否与A中的元素相等
            if (position > 0)
                DeleteList(A, position, &e);      //如果相等,则将其从A中删除
        }
    }
}

测试程序如下

/** 程序测试  :*/
void DeleteElement(LinkList A, LinkList B); //求A-B的函数声明

int main() {
    DataType a[] = {1,2,3,4,5,6};
    DataType b[] = {1,2,3};
    LinkList A, B;       //声明链表A,B
    ListNode *p;
    InitList(&A);       //初始化链表A
    InitList(&B);       //初始化链表B
    for (int i = 1; i <= sizeof(a) / sizeof(a[0]); i++)     //把数组a中的元素插入到单链表A中
    {
        if (InsertList(A, i, a[i - 1]) == 0) {
            printf("插入位置不合法!");
            return 1;
        }
    }
    for (int i = 1; i <= sizeof(b) / sizeof(b[0]); i++)     //把数组b中的元素插入到单链表B中
    {
        if (InsertList(B, i, b[i - 1]) == 0) {
            printf("插入位置不合法!");
            return 1;
        }
    }
    printf("单链表中A的元素有%d个:\n", ListLenght(A));
    for (int i = 1; i <= ListLenght(A); i++)     //输出单链表A中的元素
    {
        p = Get(A, i);      //返回单链表A中节点的指针
        if (p)
            printf("%4d", p->date);     //输出单链表A中元素
    }
    printf("\n");
    printf("单链表中B的元素有%d个:\n", ListLenght(B));
    for (int i = 1; i <= ListLenght(B); i++) {
        p = Get(B, i);      //返回单链表B中节点的指针
        if (p)
            printf("%4d", p->date);     //输出单链表B中元素
    }
    printf("\n");
    DeleteElement(A, B);     //将在单链表A中出现的B中的元素删除:即A-B
    printf("执行(A-B)后,A中的元素还有%d个:\n", ListLenght(A));
    for (int i = 1; i <= ListLenght(A); i++) {
        p = Get(A, i);      //返回单链表A中节点的指针
        if (p)
            printf("%4d", p->date);     //输出删除后A中元素
    }

}

运行结果

单链表中A的元素有6个:
   1   2   3   4   5   6
单链表中B的元素有3个:
   1   2   3
执行(A-B)后,A中的元素还有3个:
   4   5   6
Process finished with exit code 0

此代码只给出了主要代码,里面的一些方法请看思想代码
或者直接看源码
源码放在GitHub:源码链接

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值