顺序串二路归并

顺序串二路归并,并按从小到大排序

#include <iostream>
using namespace std;

const int MaxSize=100;			//顺序表的大小
template <typename T> class SqList;	
template <typename T> void move2(SqList<T> &L);
template <typename T> istream& operator >> (istream &in, SqList<T> &R);
template <typename T> ostream& operator << (ostream &out, SqList<T> &R);
template <typename T> void union1(SqList<T>&L,SqList<T>&K);
template <typename T>
class SqList					//顺序表类
{
	T *data;						//存放顺序表中元素
	int length;   					//存放顺序表的长度
public:
	SqList();					//构造函数
	~SqList();					//析构函数
	void CreateList( );	   //建立顺序表,当输入为EOF时,结束输入
	void DispList();				//输出顺序表L中所有元素
	int ListLength();				//求顺序表的长度
	bool GetElem(int i, T &e);		//求顺序表中某序号的元素值
	int LocateElem(T e);			//按元素值查找其序号
	bool ListInsert(int i, T e);	//插入数据元素
	bool ListDelete(int i);			//删除数据元素
 void reverse();
 void move();
 friend void move2<>(SqList<T> &L);
 friend istream& operator >><> (istream &in, SqList<T> &R);
 friend ostream& operator <<<> (ostream &out, SqList<T> &R);
 friend void union1<>(SqList<T>&L,SqList<T>&K);
};
//-----------------顺序表的基本运算算法--------------------------------
template <typename T>
SqList<T>::SqList()	//构造函数
{
	data=new T[MaxSize];		//为data分配长度为MaxSize的空间
	length=0;					//初始时置length为0
}
template <typename T>
SqList<T>::~SqList()	//析构函数
{
	delete [] data;				//释放空间
}
template <typename T>
void SqList<T>::CreateList( )	//由a中的元素建立顺序表
{	int i=0;
      T x;
     cin>>x;
	while(x!=-1)
		{data[i++]=x;	
		 cin>>x;}			//将a的每个元素存放到data元素中
	length=i;
}
template <typename T>
void SqList<T>::DispList()		//输出顺序表中所有元素
{	int i;
	if (length > 0)
	{
		for (i=0; i<length; i++)	//扫描顺序表中各元素值
			cout << data[i] << " ";
		cout << endl;
	}
}
template <typename T>
int SqList<T>::ListLength()		//求顺序表的长度
{
	return length; 
}
template <typename T>
bool SqList<T>::GetElem(int i, T &e)	//求顺序表中某序号的元素值
{	if (i < 1 || i > length)
		return false;					//参数错误时返回false
	e=data[i - 1];					//取元素值
	return true;						//成功找到元素时返回true
}
template <typename T>
int SqList<T>::LocateElem(T e)		//按元素值查找其序号
{	int i=0;
	while (i < length && data[i]!=e)
		 i++;							//查找元素e
	if (i>=length)						//未找到时返回0
		return 0;
	else
		return i + 1;					//找到后返回其逻辑序号
}

template <typename T>
bool SqList<T>::ListInsert(int i, T e)		//插入数据元素
{	int j;
	if (i<1 || i>length+1)
		return false;					//参数错误时返回false
	for (j=length; j>=i; j--)			//将data[i-1]及后面元素后移一个位置
		data[j]=data[j-1];
	data[i-1]=e;						//插入元素e
	length++;							//顺序表长度增1
	return true;						//成功插入返回true
}
template <typename T>
bool SqList<T>::ListDelete(int i)	//删除数据元素
{	int j;
	if (i<1 || i>length)				//参数错误时返回false
		return false;
	for (j=i-1; j<length-1; j++)		//将data[i]之后的元素前移一个位置
		data[j]=data[j+1];
	length--;							//顺序表长度减1
	return true;						//成功删除返回true
}
//--------------------------------------------------------------------- 
template <typename T>
void move2(SqList<T> &L)
{ 
     int i=0, j=L.length-1;
      T  pivot=L.data[0];	  //以data[0]为基准
      while (i<j)
      {     while (j>i && L.data[j]>pivot)
	     j--;       		//从右向左扫描,找≤pivot的data[j]
             L.data[i]=L.data[j];	 //将其放入data[i]处
             while (i<j && L.data[i]<=pivot)
	    i++;      		//从左向右扫描,找>pivot的记录data[i]
            L.data[j]=L.data[i];	//将其放入data[j]处
      }
      L.data[i]=pivot;    		//放置基准 
 }








	#include"Sqlist.h"
	
	template <typename T>
	istream& operator >> (istream &in, SqList<T> &R)
	{
	  int i=0;
	      T x;
	     in>>x;
		while(x!=-1)
	    {
	        R.data[i]=x;
	        i++;
	        in>>x;
	    }
		R.length=i;
		return in;
	 }
	template <typename T>
	ostream& operator << (ostream &out, SqList<T> &R)
	{
	    int i;
	    if (R.length > 0)
		{
			for (i=0; i<R.length; i++)
				out << R.data[i] << " ";
			out << endl;
		}
		return out;
	}
	template <typename T>
	void union1(SqList<T> &L,SqList<T> &K)
	{
	    int l,k;
	    int i=1;
	    T j=0;
	    k=K.ListLength();
	    while(i<=k)
	    {
	        l=L.ListLength();
	        K.GetElem(i,j);
	        if(L.LocateElem(j)==0)
	        {
	            L.ListInsert(l+1,j);
	        }
	        i++;
	    }
	}
	
	int main()
	{
	    SqList<int> LA;
	
	    SqList<int> LB;
	
	    cin>>LA;
	
	    cin>>LB;
	
	    union1(LA,LB);
	
	    cout<<LA;
	
	    return 0;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值