p45-09

news/2025/1/14 9:56:45/

数据结构与算法 p45-09

已知两个元素按值递增有序排列的线性表A和B,且同一表中的元素值各不相同。

试构造一个线性表C,其为A和B中的元素的交集,且表C中的元素也按值递增有序排列


A,B,C都是顺序表时

http://blog.csdn.net/weimengnvbianba/article/details/15028171



A,B,C都是单链表表时


#include<iostream.h> 
typedef  int T;  template<class T>  
struct Node  
{  T data;//数据域,存放表元素  Node *next;//指针域,指向下一个结点  
};  template <class T>  
class LinkList  
{  private:  Node<T> *Head;// 链表头指针  public:  LinkList() ;~LinkList();void CreateList(int n);//创建具有n个元素的线性链表  void createlist(int n,int a[]);//创建合并的线性链表   void Delete(int i);  T GetElem(int i);  int Length();  void ListDisplay();  
};  
template<class T>  
LinkList<T>::LinkList()  
{ Head=new Node<T>;  Head->next=NULL;  
}  template<class T>  
LinkList<T>::~LinkList()  
{  Node<T> *p;  while(Head)//从头结点开始,依次释放结点  {  p=Head;  Head=Head->next;  delete p;  }  Head=NULL;//头结点指向空  
}  template<class T>  
void LinkList<T>::CreateList(int n)  
{  Node<T> *p,*s;//设置工作指针。p指向尾结点  int start,step;  p=Head;  cout<<"请依次输入初始值和步长:"<<endl;  cin>>start>>step;  for(int i=1;i<=n;i++)  {  s=new Node<T>; s->data=start+(i-1)*step;  s->next=p->next;  p->next=s;  p=s;  }  
}  template<class T>  
void LinkList<T>::createlist(int k,int a[])  
{  Node<T> *p,*s;  p=Head;  for(int i=1;i<=k;i++)  {  s=new Node<T>; s->data=a[i-1];//输入新建数据元素值  s->next=p->next;  p->next=s;  p=s;  }  
}  template <class T>  
void LinkList<T>::Delete (int i)  
{//删除指定位置元素  Node<T> *p,*q;//设置工作指针  p=Head;//查找从头结点开始  int j=0;//计数器初始化  while(p->next && j<i-1)//p定位到删除点的前驱  {  p=p->next;//  j++;  }  if(!p->next||j>i-1) //删除位置不合理  throw"位置异常";  else //删除位置合理  {  q=p->next;// 暂存删除结点位置  p->next=q->next;//从链表中摘除删除结点  delete q;// 释放删除点  }  
}  template<class T>  
T LinkList<T>::GetElem(int i)  
{//获取第i个元素的值  Node<T> *p;//设置工作指针  p=Head->next;//从首结点开始  int j=1;//计数器初始化  while(p&&j<i)//定位到第i个元素结点  {  p=p->next;j++;  }  if(!p||j>i)//定位位置不合理:空表或i小于0或i大于表长  throw "位置";  else //位置合理  return p->data;  
}  template <class T>  
int LinkList<T>::Length()  
{  int len=0;//计数器初始化  Node<T> *p;//设置工作指针  p=Head;//指向头结点  while(p->next)  {  len++;p=p->next;  }  return len; 
}  template <class T>  
void LinkList<T>::ListDisplay()  
{//遍历显示链表  Node<T> *p;//设置工作指针  p=Head->next;//从首元结点开始遍历  int i=1;//元素位序  while(p)  {  cout<<p->data<<"  ";  p=p->next;  i++;  }  cout<<endl;  
}  int main()  
{  int t=0,la_len,lb_len,a,b,array[100],i,j;  LinkList<int> La,Lb,Lc;   cout<<"请输入要创建A集合中元素个数:";    cin>>la_len;     La.CreateList(la_len);    cout<<endl<<"La:"<<"\t";    La.ListDisplay();     cout<<endl<<"请输入要创建的B集合中元素个数:";    cin>>lb_len;    Lb.CreateList(lb_len);    cout<<endl<<"Lb:"<<"\t";    Lb.ListDisplay();    int a_length=La.Length();  int b_length=Lb.Length();  for(i=1;i<a_length;i++)  {  a=La.GetElem(i);  for(j=1;j<=b_length;j++)  {  b=Lb.GetElem(j);if(a<b)break;if(a==b)  {  array[t]=b;  t++;break;}               }  }  cout<<endl<<"A集合和B集合的交集C的元素如下:";   Lc.createlist(t,array);  cout<<endl<<"Lc:"<<"\t";             Lc.ListDisplay();  cout<<endl;              return 0;  
}  



http://www.ppmy.cn/news/155189.html

相关文章

【计算机网络】湖科大微课堂笔记 p41-46 网络层概述、网络层提供的两种服务、IPv4地址概述、分类编址划分子网无分类编址的IPv4地址

目录 网络层概述小结 网络层提供的两种服务小结 IPv4地址概述一些例题小结 分类编址的IPv4地址小结一些例题 划分子网的IPv4地址小结一些例题 无分类编址的IPv4地址小结一些例题 网络层概述 网络层的主要任务是实现网络互连&#xff0c;进而实现数据包在各网络之间的传输。 要…

p37 p38 p39 p40 p41

p37:嵌套循环 在循环中再嵌套一层循环&#xff0c;解决一些实际问题 例如我们想在屏幕中打印如下图片&#xff0c;就需要利用嵌套循环 打印星图&#xff1a; #include<iostream> using namespace std; int main() {for (int i 0; i < 10; i) //外圈执行一次{for (…

Solidigm P44 Pro M.2 SSD评测:全套原厂方案,性能高效且稳定

SK海力士收购Intel闪存业务重组而成的Solidigm在今年8月份推出了第一款消费级SSD P41 Plus&#xff0c;这款产品主打高性价比&#xff0c;而高端市场他们肯定也是不会忽视的&#xff0c;他们就为游戏发烧友带来了高性能的P44 Pro SSD&#xff0c;和此前读取速度只有4125MB/s的P…

python学习笔记P41-47

P41复习 s abcd123# for i in range(10): #0,1,2,3,..,9 # print(i)# for i in s: # a,b,c,d,1,2,3 # print(i)sum 0 for i in sag237dabkd73:if i.isdigit():sum int(i) print(sum)字符串&#xff1a; 下标&#xff1a; 0~n-1 n~-1 s[-1],s[3] 切片: s[1:-1] s[…

Bios 技嘉P41主板设置开机关闭自检Halt on

1.开机按del键进入Bios&#xff1b; 2.Standard CMOS Features -> Halt On&#xff1b; 3.选择No Errors&#xff1b; 注&#xff1a;可拔掉显卡运行电脑&#xff0c;通过远程访问。

C语言学习笔记《带你学C带你飞》P41-P61

文章目录 41、内联函数和一些鲜为人知的技巧42、结构体43、结构体数组和结构体指针44、传递结构体变量和结构体指针45、单链表146、单链表247、单链表348、内存池49、基础typedef50、进阶typedef51、共用体52、枚举类型53、位域54、位操作55、移位和位操作的应用56、打开和关闭…

【Go LeetDay】总目录(1~83)

Leetcode Golang Day1~10 Golang每日一练(leetDay0001) 1. 两数之和 Two Sum 2. 两数相加 Add Two Numbers 3. 无重复字符的最长子串 Longest-substring-without-repeating-characters Golang每日一练(leetDay0002) 4. 寻找两个正序数组的中位数 Median of two sorted arra…