顺序表的基本操作

啥也不说,为了工作……

C++的代码在VS2010中写的时候总感觉有些水土不服,还是回到熟悉的vc++6.0吧

#include<stdio.h>
#include<stdlib.h>

#define LIST_INIT_SIZE 100
#define LISTINCREMENT  10

typedef struct
{//顺序表结构
	int *elem;
	int length;
	int listsize;
}SqList;

int InitList(SqList &L)
{//构造一个空的线性表

	L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
	if(L.elem==NULL)
	{
		exit(-1);
	}
	L.length=0;
	L.listsize=LIST_INIT_SIZE;
	return 0;
}

int ListInsert_Sq(SqList &L, int i, int e)
{//向顺序表中第i个位置处插入元素

	if(i<1 || i>L.length) 
		return -1;
	if(L.length>=L.listsize)
	{
		newbase=(int *)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(int));
		if(newbase!==NULL)
		{
			L.elem=newbase;
			L.listsize=L.listsize+LISTINCREMENT;
		}
	}

	for(int r=L.length;r>=i;r--)
		L.elem[r]=L.elem[r-1];
	L.elem[r]=e;
	L.length++;

	return 0
}

int ListDelete_Sq(SqList &L, int i, int &e)
{//顺序表删除第i个元素

	if(i<1 || i>L.length)
		return -1;
	for(int r=i-1;r<L.length,r++)
		L.elem[r]=L.elem[r+1];
	L.length--;

}


void MergeList_Sq(SqList La, SqList Lb, SqList &Lc)
{//已知顺序线性表La和Lb的元素按值非递减排列,归并La和Lb得到新的顺序表Lc
 //Lc也按值非递减排列

	Lc.length=La.length+Lb.length;
	Lc.listsize=Lc.length;
	Lc.elem=(int *)malloc(Lc.listsize*sizeof(int));
	if(Lc.elem==NULL) return -1;

	int *pa=La.elem; 
	int *pb=Lb.elem; 
	int *pc=Lc.elem;
	int *pa_last=La.elem+La.length-1;
	int *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 DestroyList_Sq(SqList &L)
{//销毁顺序表

	if(L.elem!==NULL)
	{
		free(L.elem);
		L.elem=NULL;
	}

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值