数据结构:线性表

本文详细介绍了数据结构中的线性表,包括其定义、特点和常见操作,如插入、删除和查找。通过实例分析,阐述了线性表在数组和链表两种实现方式下的优缺点,并探讨了它们在实际应用中的选择策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
using namespace std;
#define MAXSIZE  5
#define OK       1
#define TRUE     1
#define FALSE    0
#define ERROR    0
//状态信息
typedef int Status;
//存储返回信息
typedef int ElemType;
//线性表结构体定义
 struct SqList{
	int data[MAXSIZE];//data数组
	int length;//线性表当前长度
};
 //数据获取 i插入点 e获取值 返回状态标志 L线性表
 Status GetElem(SqList L, int i, ElemType* e) {
	 //下标越界 报错
	 if (L.length == 0 || i<1 || i>L.length)
		 return ERROR;
	 //数组下标为实际标号减一 
	 *e = L.data[i - 1];
	 //return 成功标志
	 return OK;
 }
 //插入操作  L线性表 i插入点 e插入值
 Status ListInsert(SqList* L, int i, ElemType e) {
	 int k;
	//如果当前数组已满 报错
	 if (L->length == MAXSIZE)
		 return ERROR;
	//如果插入范围越界 实际序号为数组序号减一
	 if (i<1 || i>L->length + 1)
		 return ERROR;
	 //插入数据不在表尾 需要移动数据
	 if (i <= L->length)
		 //插入位置至表位都需后移一位 插入至当前位置之前
		  //包括插入点 所以k可以等于i-1
		 for (k = L->length - 1; k >= i - 1; k--)
			 L->data[k + 1] = L->data[k];
	 //此时后移完成 元素填入 数组下标为实际下标减一 
 	 L->data[i - 1] = e;
	 //插入之后线性表元素增加
	 ++L->length;
	 //返回成功标志
	 return OK;
 }
 //删除操作
 Status ListDelete(SqList* L, int i, ElemType* e) {
	 int k;
	 //表无元素可删
	 if (L->length == 0)
		 return ERROR;
	//删除位置越界
	 if (i<1 || i>L->length)
		 return ERROR;
	 //存储删除元素的值
	 *e = L->data[i - 1];
	 //删除的不是最后元素 元素需要前移
	 if (i < L->length) {
		 //数组位置为实际位置减一 i-1
		 //删除位置往后 前移覆盖  i-1+1
		 for (k = i; k < L->length; ++k)
			 L->data[k - 1] = L->data[k];
	 }
	 //最后值覆盖并自减长度
	 L->data[--L->length] = NULL;
	 return OK;
 }
int main(int argc, char** argv) {
	system("pause");
	return 0;



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值