基础线性表(8中基本算法)

#include<iostream>
using namespace std;

#define MaxSize 100

typedef int ElemType;
typedef struct{
	int data[MaxSize];
	int length;
}SqList;


//(1)初始化线性表运算算法
void Initlist(SqList &L){  //初始化传给实参要引用
	L.length = 0;
}

//(2)销毁线性表运算算法
void DestroyList(SqList L)
{

}


//(3)求线性表长度运算算法
int GetLength(SqList L){
	return L.length;
}

//(4)求线性表中第i个元素运算算法
int GetElem(SqList L, int i, int &e){  //逻辑序号i无效返回0,有效返回1,引用形参e返回第i个元素的值
	if (i<1 || i>L.length)
		return 0;
	else{
		e = L.data[i - 1];	//取元素并返回1
		return 1;
	}
}


//(5)按值查找运算算法
int Locate(SqList L, int x){
	//x为查找的值,找到后返回逻辑序号(逻辑序号从1开始,o表示没有找到)
	int i = 0;
	while (i < L.length&&L.data[i] != x)
		i++;
	if (i>L.length)
		return (0);
	else return(i + 1);

}

//(6)插入元素运算算法
int InsElem(SqList &L, int x, int i){
	//将新元素x,插入到表中逻辑序号为i的位置
	//插入成功成为第i个元素,失败返回0
	int j;
	if (i<1 || i>L.length + 1) //逻辑序号从1开始,并且不会大于表的长度
		return 0;
	for (j = L.length; j > i - 1; j--) //将位置i及之后的元素后移
		L.data[j] = L.data[j - 1];
	L.data[i - 1] = x;
	L.length++;
	return 1;
}


//(7)删除元素运算算法
int DelElem(SqList &L, int i){
	int j;
	if (i<1 || i>L.length)
		return 0;
	for (j = i; j < L.length; j++)  //i之后的元素均前移
		L.data[j - 1] = L.data[j];
	L.length--;
	return 1;
}



//(8)输出元素值运算算法
//遍历L,输出各元素值
void DispList(SqList L){
	int i;
	for (i = 0; i < L.length; i++)
		printf("%d ", L.data[i]); //这里空格就输出空格
	printf("\n");
}

int main(){
	int i;
	int data;
	int e;
	SqList L;	//定义顺序表L
	Initlist(L); //初始化顺序表L

	InsElem(L, 1, 1);
	InsElem(L, 3, 2);
	InsElem(L, 1, 3);
	InsElem(L, 5, 4);
	InsElem(L, 4, 5);
	InsElem(L, 2, 6);
	printf("线性表:");
	DispList(L);

	printf("线性表的长度:%d\n", GetLength(L));

	i = 3;
	GetElem(L, i, e);
	printf("线性表第%d个元素:%d\n", i, e);

	e = 1;
	printf("线性表元素%d是第%d个元素\n", e, Locate(L, e));

	i = 4;
	printf("删除线性表第%d个元素\n", i);
	DelElem(L, i);
	printf("线性表:");
	DispList(L);
	DestroyList(L);

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值