尼采般地抒情

尼采般地抒情

尼采般地抒情

音乐盒

站点信息

文章总数目: 313
已运行时间: 1541

实验要求

求两个集合LALB(用单链表表示)的并和交集

要求:在实验二的基础上,使用单链表表示集合。编写两个算法(求交算法和求并算法),并输出最终的结果。

测试用例:集合A{3416},集合A{2367}

           交集为{36}

           并集为{123467}

交作业时间:4月16日

实验代码

#include<bits/stdc++.h>
using namespace std;

/**

  • 求两个集合LA和LB(用单链表表示)的并和交集
  • /

/* 单链表的存储结构 */
typedef struct LNode {
int data; //数据域
struct LNode *next; //指针域
}Lnode, *LinkList; //LinkList为指向结构体LNode的指针类型

/* 初始化链表 */
void InitList(LinkList &L) {
L = new LNode;
L->next = NULL;
}

/* 创建:后插 */
void CreateList_R(LinkList &L, int n) {
cout << "请输入" << n << "个数字"<< "\n";
InitList(L);
// 定义一个在下面循环用来一直操作所加元素的结点p来指向头结点L
LinkList p = L;
for (int i = 0; i < n;i++) {
LinkList q = new Lnode;
q->next = NULL;
cin >> q->data;
p->next = q;
p = q; //为了下一次
}
}

/* 打印 */
void TraverseList(LinkList & L){
LinkList p = new LNode;
p = L->next;
cout << "此链表打印的结果为:"<< "\n";
while (p != NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << "\n";
}

/* 排序单链表 */
void sort(LinkList &L) {

}

/* jiao算法 */
void jiao(LinkList &A,LinkList &B) {
// 用双循环得出共有的元素并输出
LinkList p;
InitList(p);
A = A->next;
B = B->next;
while (A != NULL ) {
LinkList copy_b = B;
while(copy_b != NULL) {
if (A->data == copy_b->data) {
LinkList temp = new Lnode;
temp->data = copy_b->data;
temp->next = p->next;
p->next = temp;
break;
} else {
copy_b = copy_b->next;
}
}
A = A->next;
}

while(p-&gt;next != NULL) {
    cout &lt;&lt; p-&gt;next-&gt;data &lt;&lt; &quot; &quot;;
    p = p-&gt;next;
}

}

/* bing算法 */
void bing(LinkList &A,LinkList &B) {
LinkList p = A;
LinkList s = B;

A = A-&gt;next;
B = B-&gt;next;
while (A != NULL ) {
    LinkList copy_b = B;
    while(copy_b != NULL) {
        if (A-&gt;data == copy_b-&gt;data) {
            // cout &lt;&lt; A-&gt;data &lt;&lt; &quot;\n&quot;;
            // 在p链里面删除A-&gt;data值
            LinkList q = p;
            while(q-&gt;next != NULL) {
                if (q-&gt;next-&gt;data == A-&gt;data) {
                    q-&gt;next = q-&gt;next-&gt;next;
                    break;
                } else {
                    q = q-&gt;next;
                }
            }
            break;
        } else {
            copy_b = copy_b-&gt;next;
        }
    }
    A = A-&gt;next;
}
// 将p链表连接到s链表上
LinkList result = p;
while (p != NULL) {
    if (p-&gt;next == NULL) {
        p-&gt;next = s-&gt;next;
        break;
    }
    p = p-&gt;next;
}
while(result-&gt;next != NULL) {
    cout &lt;&lt; result-&gt;next-&gt;data &lt;&lt; &quot; &quot;;
    result = result-&gt;next;
}

}

int main() {
LinkList list_A;
LinkList list_B;
InitList(list_A);
InitList(list_B);
CreateList_R(list_A, 6);
CreateList_R(list_B, 6);
LinkList list_C = list_A;
LinkList list_D = list_B;
cout <<"A、B交集的值为:";
jiao(list_A, list_B);
cout <<"\n"<<"A、B并集的值为:";
bing(list_C, list_D);
}

评论区