数据结构——线性表

一.状态值

#define TRUE    1 
#define FALSE 0
#define OK     1
#define ERROR 0
#define INFEASIBLE -1//infeasible  不可实现的 
#define OVERFLOW -2 //overflow 溢出

二.线性表定义

#define LIST_INIT_SIZE 100
// list init size 顺序表存储空间的初始分配量 
#define LISTINCREMENT 10
 // list increment 顺序表存储空间的分配增量
typedef int ElemType;
typedef int status;
typedef struct
{
 ElemType *elem;
 int length;
 int listsize;
 } SqList;

三.线性表基本操作

//1.初始化
Status InitList(Sqlist &L)
{
	L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
	if (!L.elem)
		exit(OVERFLOW);
	L.length = 0;
	L.listsize = LIST_INIT_SIZE;
	return OK;
}

//2.销毁
void DestroyList(Sqlist &L)
{
	if (L.elem) free(L.elem);
	L.elem = NULL;
}

//3.清空
void ClearList(Sqlist &L)
{
	L.length = 0;
}

//4.判空
Status ListEmpty(Sqlist L)
{
	if (L.length == 0) return TURE;
	else return FALSE;
}

//5.求表长 
int ListLength(Sqlist L)
{
	return L.length;
}

//6.取元素
Status GetElem(Sqlist L, int i, ElemType &e) {
	if (i<1 || i>L.length) return ERROR;
	e = L.elem[i - 1];
	return OK;
}

//7.定位操作
int LocateElem(Sqlist L, ElemType e)
{
	int i = 1;
	while (i <= L.length && L.elem[i - 1] != e)  i++;
	if (i <= L.length) return i;
	else return 0;
}

//8.求前驱
Status  PriorElem(Sqlist L, ElemType cur_e, ElemType *pre_e)
{
	int i;
	i = LocateElem(L, cur_e);
	if ((i == 0) || (i == 1))
	{
		*pre_e = 'no';
		printf("%d无直接前驱元素\n", cur_e);
		return ERROR;
	}
	else
	{
		*pre_e = L.elem[i - 2];
		printf("%d的直接前驱元素是  %d\n", cur_e, *pre_e);
		return OK;
	}
}
//9.求后继
Status NextElem(Sqlist L, ElemType cur_e, ElemType *next_e)
{
	int i;
	i = LocateElem(L, cur_e);
	if ((i == 0) || (i == L.length))
	{
		*next_e = 'no';
		printf("%d无直接后继元素\n", cur_e);
		return ERROR;
	}
	else
	{
		*next_e = L.elem[i];
		printf("%d的直接后继元素是  %d\n", cur_e, *next_e);
		return OK;
	}
}

// 10.插入
Status ListInsert(Sqlist &L, int i, ElemType e)
{
	ElemType *p, *q;
	if (i<1 || i>L.length + 1) return ERROR;
	if (L.length == L.listsize)
	{
		L.elem = (ElemType *)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType));
		if (!L.elem) exit(OVERFLOW);
		L.listsize += LISTINCREMENT;
	}
	q = &L.elem[i - 1];
	for (p = &(L.elem[L.length - 1]); p >= q; --p)
		*(p + 1) = *p;
		*q = e;
		++L.length;
		return OK;
}

//11.删除
Status ListDelete(Sqlist &L, int i, ElemType &e)
{
	ElemType *p, *q;
		if (i<1 || i>L.length) return ERROR;
	p = &L.elem[i - 1];
	e = *p;
	q = L.elem + L.length - 1;
	for (++p; p <= q; ++p)
		*(p - 1) = *p;
	--L.length;
	return OK;
}

//12.遍历 
void Print_Sq(Sqlist L)
{
	int i;
	for (i = 0; i < L.length; i++)
		printf("%d\t", L.elem[i]);
}

//13.比较
Status CompareList(Sqlist L, ElemType e1, ElemType e2)
{
	if (e1 > e2 || e1 == e2)
		return TURE;
	else return FALSE;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值