顺序表的静态分配基本操作实现

顺序表的静态分配的基本操作实现代码

#include <stdio.h>

// 顺序表存储空间静态分配
#define MaxSize 10      // 定义最大长度
typedef int ElemType;   // int类型重命名为ElemType,方便后续调整
typedef struct {        // 定义结构体
	ElemType data[MaxSize];         // 用静态的数组存放数据元素
	ElemType length;                // 数组长度
} SqList;

void InitList(SqList &L) {         // 初始化顺序表
	for (int i = 0; i < MaxSize; i++) { // 设置数据元素的默认值,否则内存中会有遗留的“脏数据”

		L.data[i] = 0;
	}

	L.length = 0;                   // 长度赋值,没有设置数据元素的默认值
}


//按位插入数据
int InsertList(SqList &L, ElemType i, ElemType e) {
	if (i < 1 || i > L.length + 1) {      // 判断插入是否合理
		return false;
	}

	if (L.length >= MaxSize) {          // 判断插入是否合理
		return false;
	}

	for (ElemType j = L.length; j >= i; j--) {   // 循环从最后一位开始,到插入的位序,减减

		L.data[j] = L.data[j - 1];      // 将前一位值向后移一位
	}

	L.data[i - 1] = e;     // 插入的位置附上要插入的值,注意数组下标和位序是相差一位的
	L.length++;                         // 插入一个元素之后,数组的长度是要加1
	return true;
}

int  DeleteList(SqList &L, ElemType i, ElemType &e) {
	if (i < 1 || i > L.length + 1) {      // 判断删除是否合理
		return false;
	}

	e = L.data[i - 1];     // 删除的数据,注意数组的下标和位序的关系

	for (ElemType j = i; j < L.length; j++) { // 循环从要删除的位序开始,结束条件为到数组长度减一位的位置

		L.data[j] = L.data[j + 1];    // 将删除位序的值向前移动
	}

	L.length--;                         // 删除一个元素之后,数组的长度是要减1
	return true;
}


//按位查询
int GetList(SqList L, int i) {
	if (i < 0 || i > L.length)
		return 0;
	return L.data[i - 1];		// 位序和数组下标少一位
}

//按值查询
int LocateList(SqList L, int e) {
	for (int i = 0; i < L.length; i++) {

		if (L.data[i] == e) {
			return i + 1;					// 返回位序和数组下标相差一位
		}
	}

	return 0;
}

//修改第i个元素为e
int  AlterList(SqList &L, int i, int e) {
	if (i < 0 || i > L.length - 1)
		return 0;
	L.data[i - 1] = e;
	return 1;
}

//判断顺序表是否为空
bool IsEmpty (SqList L) {
	if (L.length == 0)
		return true;
	return false;
}

//判断顺序表是否为满
bool IsFull(SqList L) {
	if (L.length == MaxSize)
		return true;
	return false;
}


//打印数据
void PrintList(SqList L) {
	for (ElemType i = 0; i < L.length; i++) {

		printf("data[%d]=%d\n", i, L.data[i]);
	}
}


//主函数
int main() {
	SqList L;   // 初始化
	L.length = 6;

	for (ElemType i = 0; i < 6; i++) {      // 数组赋值

		L.data[i] = i;
	}

	int  e;
	printf("删除flag=%d\n", DeleteList(L, 5, e));
	PrintList(L);

	printf("插入flag=%d\n", InsertList(L, 2, 66));
	PrintList(L);

	printf("修改flag=%d\n", AlterList(L, 1, 88));
	PrintList(L);


	printf("按位查找第5位的值为%d\n", GetList(L, 5));
	printf("按值查找66,位序为%d\n", LocateList(L, 66));

	printf("顺序表是否为空%d\n", IsEmpty(L));
	printf("顺序表是否为满%d\n", IsFull(L));
}












运行结果如图所示

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值