p45-04

news/2024/11/28 17:50:23/

数据结构与算法 p45-04

假设有两个按元素值递增有序排列的线性表A和B,均以单链表作为其存储结构

设计一个算法将A和B归并一个按元素值递减的有序排列的线性表C

并要求利用原表(即A表和B表)的结点空间构造表C


#include<iostream.h>//cout,cin
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);//删除表中第i个元素T GetElem(int i);//获取第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)
{//尾插法(正序)创建具有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[])
{//尾插法(正序)创建具有n个元素的线性表Node<T> *p,*s;//设置工作指针。p指向尾结点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 k=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=a_length;i>0;i--){try{a=La.GetElem(i);}catch(char *err){cout<<err<<endl;}array[k]=a;k++;La.Delete(i);}  for(j=a_length;j>0;j--){try{   b=Lb.GetElem(j);   }catch(char *err){	 cout<<err<<endl;	   }array[k]=b;k++;Lb.Delete(j);}for(i=0;i<k;i++)for(j=k-1;j>i;j--){		 if(array[j]>array[i]){   int temp=array[j];array[j]=array[i];array[i]=temp;}if(array[j]==array[i])for(int w=j;w<k;w++){array[j]=array[j+1];k--;}		   }cout<<endl<<"A集合和B集合的并集C的元素如下:"; Lc.createlist(k,array);cout<<endl<<"Lc:"<<"\t";			Lc.ListDisplay();cout<<endl;return 0;
}



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

相关文章

P51 9

P51 第九题 输入某个点A的平面坐标&#xff08;x,y&#xff09;,判断&#xff08;输出&#xff09;A点是在圆内,圆外还是在圆周上&#xff0c;其中圆心坐标为&#xff08;2&#xff0c;2&#xff09;&#xff0c;半径为1 #include <stdio.h> int main() { int x,y,a;…

SAP UI5

网上很少能看到介绍OpenUI5的中文文章&#xff0c;有也是“ SAP 开源的 JavaScript 框架&#xff0c;有点重”。首先我不去说OpenUi5到底有多重&#xff0c;先说说SAP为什么把OpenUI5开源&#xff0c;除了软件license法律上的原因之外。 先说说历史&#xff0c;SAP在UI框架上的…

P5Q sata(串口硬盘) 装上LINUX

1.下载 fedora linux 8.0 相关网址 http://fedora.linuxsir.org/main/ &#xff08;因为其他版本的LINUX 内核很多都不支持SATA接口的硬盘&#xff09; 2.安装步骤这里不详细介绍了&#xff0c;都是图形化界面。 主要是分区 &#xff08;1&#xff09;记得要分一个 swap分…

P51-9

9. #include <stdio.h> int main() {float x,y,d;printf("请输入点A的坐标:\n",x,y);scanf("%f %f",&x,&y);d(x-2)*(x-2)(y-2)*(y-2);if(d1){printf("on the circular\n");} if(d<1){printf("in the circular\n");}…

QTP - 27 Working with HP’s QC 与QC交互

27 Working with HP’s QC Note: First make sure QTP connect to QC. 27.1 QC Path: QC path’s root folder is “Subject”. So all QC path startwith “[QualityCenter]Subject”. Set QC path into QTP’s Tools Options…Folder(Tab) QTP use QC paths: DataTable.I…

ubuntu 硬盘分区格式及大小方案

上周配了一台新机&#xff0c;cpu:e8400 双核 3.0G 主板 P5Q turbo 内存 4G 硬盘500G . 之前的笔记本由于内存比较小&#xff0c;所以分别装了ubuntu和win2k3。 ubuntu 正常情况下有256M内存就足够了&#xff0c;这种情况下我决定不在用物理硬盘来装 win2k3 了&#xff0c;只装…

P51 8

P51 第八题 输入整数a和b,如果能被b整除&#xff0c;就输出算式和商&#xff0c;否则输出算式&#xff0c;整数商和余数。 #include<stdio.h> #include<stdlib.h> int main() {int a,b,c;printf("请输入a,b\n");scanf("%d",&a);scanf(&q…

P4P

P4P在西方世界已经生机一片&#xff0c;但它还没有来到中国的时候&#xff0c;就遭受到了质疑。P4P有一个初级目标和高级纲领。初级目标就是加速网民下载、节约电信运营商流量。高级纲领则是建立软件厂商和电信运营商的对话机制&#xff0c;以实现网民、软件商、运营商的多赢。…