线性表--顺序表

#define _CRT_SECURE_NO_DEPRECATE
//#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1

#include<iostream>
#include<string.h>

using namespace std;

#define listInitSize 5
#define listIncrement 1

typedef struct
{
	int *elem;//此表的首地址
	int length;//此表目前的长度
	int listSize;//此表的总长度
}Sqlist;
//1.初始化此表
bool initListSq(Sqlist &L)
{
	L.elem = new int[listInitSize];
	if (!L.elem)
	{
		cout << "内存分配失败!\n";
		exit(0);
	}
	L.length = 0;
	L.listSize = listInitSize;
	return true;
}
//2.插入数据
bool listInsertSq(Sqlist &L, int i, int &e)
{
	if (i <= 0 || i >= L.length + 2) exit(0);
	if (L.length >= L.listSize)
	{
		int *newBase = new int[L.listSize + listIncrement];
		if (!newBase) exit(0);
		memcpy(newBase, L.elem, sizeof(int)*L.listSize);

		int *temp = L.elem;//
		delete[]temp;

		L.elem = newBase;
		L.listSize += listIncrement;
	}
	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 true;
}
//3.删除数据
bool listDelete(Sqlist &L, int i, int &e)
{
	if (i <= 0 || i >= L.length + 1) exit(0);
	e = L.elem[i - 1];
	for (int j = i - 1; j < L.length; j++)
		L.elem[j] = L.elem[j + 1];
	L.length--;
	return true;
}

//4.
int locateElemSq(Sqlist &L, int e, bool(*compare)(int, int))//不理解请看代码后部分的“函数与指针应用”
{
	int i = 1;
	int *p = L.elem;
	while (i <= L.length&&!(*compare)(*p++, e)) i++;
	if (i <= L.length) return i;
	return 0;
}
//5.合并两个已是递增的顺序表,按递增
bool mergeListSq(Sqlist &L1, Sqlist &L2, Sqlist &L)
{
	L.listSize = L.length = L1.length + L2.length;
	int *p = L.elem = new int[L.listSize];
	if (!L.elem) exit(0);
	int *p1 = L1.elem, *p2 = L2.elem;
	int *p1Last = L1.elem + L1.length - 1, *p2Last = L2.elem + L2.length - 1;
	while (p1 <= p1Last&&p2 <= p2Last)
	{
		if (*p1 <= *p2) *p++ = *p1++;
		else *p++ = *p2++;
	}
	while (p1 <= p1Last) *p++ = *p1++;
	while (p2 <= p2Last) *p++ = *p2++;
	return true;
}
int main()
{


	return 0;
}
/*函数与指针应用
#include<iostream>
using namespace std;
bool com(int i,int j,bool (*p)(int a,int b))//p是一个函数的指针
{
if((*p)(i,j))
{cout<<"yes";return true;}
return false;
}
bool com1(int i,int j)
{
if(i<j)
return true;
return false;
}
int main()
{
int aa=1,bb=3;
com(aa,bb,com1);
return 0;
}
OutPut:yes
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值