顺序表的基本操作和应用

#include <iostream>
using namespace std;

#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100

typedef int Status;
typedef int ElemType;

typedef struct {
	ElemType *elem;
	int length;
}SqList;
 
Status InitList(SqList &L) 
{
	L.elem=new ElemType[MAXSIZE];
	if(!L.elem) 
		exit(OVERFLOW);
	L.length=0;
	return OK;
}

int GetElem(SqList L,int i,ElemType &e) 
{
	if (i<1||i>L.length) 
		return ERROR;
	e=L.elem[i-1];
	return OK;
}

int LocateElem(SqList L,ElemType e) 
{
	for(int i=0; i<L.length; i++)
		if(L.elem [i]==e)
			return i+1;
	return 0;
}

Status ListInsert(SqList &L,int i,ElemType e) 
{
	if((i<1)||(i>L.length+1))
		return ERROR;
	if(L.length==MAXSIZE) 
		return ERROR;
	for(int j=L.length-1; j>=i-1; j--)
		L.elem[j+1]=L.elem[j];
	L.elem[i-1]=e;
	++L.length;
	return OK;
}

Status ListDelete(SqList &L,int i) 
{
	if((i<1)||(i>L.length))
		return ERROR;
	for(int j=i; j<=L.length-1; j++)
		L.elem[j-1]=L.elem [j];
	--L.length;
	return OK;
}

void MergeList_Sq(SqList LA,SqList LB,SqList &LC)
{
    LC.length=LA.length+LB.length;
    LC.elem=new ElemType[LC.length];
    ElemType *pa,*pb,*pc,*pa_last,*pb_last;
    pc=LC.elem;                    
    pa=LA.elem;
	pb=LB.elem;           
    pa_last=LA.elem+LA.length-1;    
    pb_last=LB.elem+LB.length-1;     
    while(pa<=pa_last&&pb<=pb_last)     
    {
        if(*pa<=*pb)      
            *pc++=*pa++;
        else
            *pc++=*pb++;
    }
    while(pa<=pa_last)   
        *pc++=*pa++;
    while(pb<=pb_last)   
        *pc++=*pb++;
}

int main() 
{
	int i,e;
    SqList LA,LB,LC;
    InitList(LA);
    InitList(LB);
    InitList(LC);
    cout<<"输入有序表A:";
    for(i=0; i<5; i++)
	{
		cin>>LA.elem [i];
		LA.length++;
	}
    cout<<"输入有序表B:";
    
    for(i=0; i<5; i++) 
	{
		cin>>LB.elem [i];
		LB.length++;
	}
    MergeList_Sq(LA,LB,LC);
    for(i=0; i<LC.length; i++)
		cout<<LC.elem [i]<<' '; 
	cout<<endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值