数据结构假设分别以两个元素的值递增有序线性表a,b表示两个集合,现在要构成一个新的线性表c,c表示a b的交

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-08-27
加设以两个元素依值递增有序排列的线性表A和B分别表示两个集合(即同一表中的元素各不相同),现要求另辟

 // 将合并逆置后的结果放在C表中,并删除B表
  Status ListMergeOppose_L(LinkList &A,LinkList &B,LinkList &C)
  {
  LinkList pa,pb,qa,qb;
  pa=A;
  pb=B;
  qa=pa;// 保存pa的前驱指针
  qb=pb;// 保存pb的前驱指针
  pa=pa->next;
  pb=pb->next;
  A->next=NULL;
  C=A;
  while(pa&&pb){
  if(pa->datadata){
  qa=pa;
  pa=pa->next;
  qa->next=A->next;//将当前最小结点插入A表表头
  A->next=qa;
  }
  else{
  qb=pb;
  pb=pb->next;
  qb->next=A->next;//将当前最小结点插入A表表头
  A->next=qb;
  }
  }
  while(pa){
  qa=pa;
  pa=pa->next;
  qa->next=A->next;
  A->next=qa;
  }
  while(pb){
  qb=pb;
  pb=pb->next;
  qb->next=A->next;
  A->next=qb;
  }
  pb=B;
  free(pb);
  return OK;
  }

#include"stdio.h"
#include"malloc.h"
struct list
{
int data;
struct list *next;
};
struct list *head1,*head2,*p1,*p2,*q1,*q2;
void main()
{
int n=0;
void unionlist();
p1=q1=(struct list*)malloc(sizeof(struct list));
printf("请输入第一个链表的信息
");
scanf("%d",&p1->data);
while(p1->data!=0)
{
n=n+1;
if(n==1)
head1=q1;
else
q1->next=p1;
q1=p1;
p1=(struct list*)malloc(sizeof(struct list));
scanf("%d",&p1->data);
}
q1->next=NULL;
n=0;
p2=q2=(struct list*)malloc(sizeof(struct list));
printf("请输入第二个链表的信息
");
scanf("%d",&p2->data);
while(p2->data!=0)
{
n=n+1;
if(n==1)
head2=q2;
else
q2->next=p2;
q2=p2;
p2=(struct list*)malloc(sizeof(struct list));
scanf("%d",&p2->data);
}
q2->next=NULL;
unionlist();
}
void unionlist()
{
struct list *head,*p;
int i=0;
p1=head1;
p2=head2;
head=p=(struct list*)malloc(sizeof(struct list));
p->data=0;
while(p1 && p2)
{
if(p1->datadata)
{
p->next=p1;
p=p1;
p1=p1->next;
}
else
{
p->next=p2;
p=p2;
p2=p2->next;
}
}
p->next=p1?p1:p2;
p=head;
printf("合并后的链表为如下:
");
while(p)
{
i=i+1;
if(i==1)
p=p->next;
printf("%3d",p->data);
p=p->next;
}
printf("
");
free(head1);
free(head2);
}

#include<iostream>
using namespace std;
struct Node
{
int data;
Node *next;
};
class LinkList
{
public:
Node * intLinkList(int a[],int n)
{
first=new Node;
first->next=NULL;
for(int i=(n-1);i>=0;i--)
{
Node *s;
s=new Node;
s->data=a[i];
s->next=first->next;
first->next=s;
}
return first;
}
void PrintList()
{
Node *p;
p=first->next;
while(p)
{
cout<<p->data<<"\t";
p=p->next;
}
}
private:
Node *first;
};
void Interest(Node *A, Node *B)
{
Node *p, *q;
p=A->next; q=B->next;
while(p && q)
{
if(p->data<q->data)
{
A->next=p->next;
p=p->next;
}
else if(p->data>q->data) q=q->next;
else{
p=p->next;
q=q->next;
}
}
}
void Bingji(Node *A, Node *B)
{
Node *p, *q,*r;
p=A->next; q=B->next;
while(p&&q)
{
if(p->data<q->data){ r=p; p=p->next;}
else if(p->data>q->data)
{
B->next=q->next;
q->next=p;
r->next=q;
q=B;
}
else if(p->data=q->data){
r=p;
p=p->next;
q=q->next;
}

}
r->next=q;
}
void Chaji(Node *A, Node *B)
{
Node *p, *q;
p=A->next; q=B->next;
while(p &&q)
{
Node *r;
if(p->data<q->data)
{
r=p;
p=p->next;
}
else if(p->data>q->data) q=q->next;
else{
Node *s;
s=p;
r->next=p->next;
p=r->next;
delete s;
}
}
}
void main()
{
cout<<"************两个集合的 交,并,差 运算**************"<<endl;
int A1[]={ 1,2,3,4,5,6};
int B1[]={ 3,4,5,6,7,8};
int A2[]={ 1,2,3,4,5,6};
int B2[]={ 3,4,5,6,7,8};
int A3[]={ 1,2,3,4,5,6};
int B3[]={ 3,4,5,6,7,8};
LinkList L1; LinkList P1;
LinkList L2; LinkList P2;
LinkList L3; LinkList P3;
Node *Head1=L1.intLinkList(A1 ,6);
Node *Head12=P1.intLinkList(B1 ,6);
Node *Head2=L2.intLinkList(A2 ,6);
Node *Head22=P2.intLinkList(B2 ,6);
Node *Head3=L3.intLinkList(A3 ,6);
Node *Head32=P3.intLinkList(B3 ,6);
Interest(Head1,Head12);
cout<<"两个集合的交集是:";
L1.PrintList();
cout<<endl<<"****************************"<<endl;
Bingji(Head2,Head22);
cout<<"两个集合的并集是:";
L2.PrintList();
cout<<endl<<"****************************"<<endl;
Chaji(Head3,Head32);
cout<<"两个集合的差集是:";
L3.PrintList();
cout<<endl<<"****************************"<<endl;

}

勤快点吧,用归并算法。。。不是很难,不会了再回我

sd

  • 求解答啊,大神们。数据结构的。
    答:循环链表按值递增??我想知道你的链表尾部最后会链接到头部去。。怎么递增?。。蛇吞尾吗?
  • 数据结构与算法:已知两个递增单链表ab,合成一个递减的单链表c,要求使 ...
    答:node));head->next=NULL;}void input(list &h){list p,q;q=h;printf("输入数据的个数 n : ");int n;scanf("%d",&n);printf("请输入 %d 个有序递增数据:\n",n);for (int i=0;i<n;i++){//printf("第 %d 个: ",i+1);p=(list)malloc(sizeof(node));scanf("%d",...
  • c语言编程,两个有序表其元素为递增有序,将此两表归并成一新的有序表并...
    答:sqlist union(sqlist sa,sqlist sb){int sc[maxsize];sa.length=length(sa);sb.length=length(sb);maxsize=sa.length+sb.length;i=0;while(i<sa.length&&i<sb.length){j=0;if(sa[i]<=sb[i]) {sc[j]=sa[i];j++} i++;} while(i<sa.length&&i<sb.length){sc[j]=sa[...
  • 数据结构里面的非递减有序排列是啥意思啊?就是递增排列???
    答:其它定义 1.Sartaj Sahni在他的《数据结构、算法与应用》一书中称:“数据结构是数据对象,以及存在于该对象的实例和组成实 例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”他将数据对象(data object)定义为“一个数据对象是实例或值的集合”。2.Clifford A.Shaffer在《数据...
  • 设顺序表VA中的数据元素递增有序。写一算法,将X插入到表的适当位置,从...
    答://函数说明://先输入n,表示首先建立一个链表的元素个数//然后输入n个元素,建立有序链表//再输入要插入的元素,调用函数插入//输出最终链表#include <stdio.h>#include <stdlib.h>struct node{ int data; struct node *next;};void insert(struct node *head,int x)//链表的插入函数...
  • 考试题,求大神解答,很急
    答:数据结构问题:给定一组数据{6,2,7,10,3,12}以它构造一棵哈夫曼树,则树高为5,带权路径96。
  • 如何编程实现数组元素之间的加减运算呢?
    答:选数组成两道加法算式和两道减法算式:8+14=22、14+8=22、22-14=8、22-8=14。1.数组的基本概念及存储方式 数组是一种线性数据结构,由一系列相同类型的元素组成。数组中的元素按照顺序存储在连续的内存空间中。每个元素可以通过数组的下标来访问,下标从0开始递增。使用数组可以方便地存储和访问多个...
  • 数据结构之数组与字符串
    答:元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:双指针解法: 当 nums[j] 与给定的值相等时,递增 j 以跳过该元素。只要 nums[j] != val,我们就复制 nums[j] 到 nums[i] 并同时递增两个索引。重复这一过程,直到 j 到达数组的末尾,该数组的新长度为 i。给定一...
  • 数据结构包括那几部分,如何运算?
    答:常用运算方法:1、检索。检索就是在数据结构里查找满足一定条件的节点。一般是给定一个某字段的值,找具有该字段值的节点。2、插入。往数据结构中增加新的节点。3、删除。把指定的结点从数据结构中去掉。4、更新。改变指定节点的一个或多个字段的值。5、排序。把节点按某种指定的顺序重新排列。例如递...
  • 数据结构里面的非递减有序排列是啥意思啊?就是递增排列
    答:非递减有序排列 其实就是递增的序列,只过允许有重复的元素,单调递增不允许有重复的元素