列表项插入、删除及查找算法

本文深入探讨了列表数据结构中常见的插入、删除和查找算法,包括它们的时间复杂度分析,以及在不同场景下如何选择合适的操作策略。通过对这些基本操作的理解,可以提升在实际编程中处理列表数据的效率。
摘要由CSDN通过智能技术生成
#include <iostream>
using namespace std;
/*函数定义
*/
typedef  int  ElemType;
#define  True     1
#define  False    0
#define  MAX_SIZE 20
typedef  bool   Type;
typedef struct {
	ElemType  *elem;//存储空间基地址
	int length; //当前长度
	int listsize;//当前分配的存储容量
}SqList;
/*全局定义
*/
SqList Ring_buffer;
/*函数声明
*/
Type  InitList(int maxsize);
Type  RangeCheck(int insert);
Type  add(int insert, ElemType date);
Type  Delete(int insert, ElemType &date);
void  add(ElemType date);
Type isdexOF(ElemType date);
void Printf(void);
/*
*主函数
*/
int main(void) {
	int a;
	InitList(20);
	add(20);
	add(10);
	add(30);
	add(100);
	add(1, 5);
	Printf();
	Delete(2,a);
	Printf();
	getchar();
	return 0;
}
/*
*打印当前顺序表
*/
void Printf(void) {
	cout << "Ring_Buffer=" << "{sizenum=" << Ring_buffer.length ;
	for (int *i = &(Ring_buffer.elem[0]); i <= &(Ring_buffer.elem[Ring_buffer.length - 1]); i++) {
		cout << ",{ " << *i << " }";
	}
	cout << "}"<<endl;
}
/*
*线性表初始化
*@return Type
*/
Type InitList(int maxsize) {
	Ring_buffer.elem = (ElemType*)malloc(maxsize * sizeof(Ring_buffer));
	if (!Ring_buffer.elem)return  False;
	Ring_buffer.length = 0;
	Ring_buffer.listsize = maxsize;
	return True;
}
/*
*线性表插入
*@param insert
*@param  date
*/
Type  add(int insert, ElemType date) {
	ElemType *address;
	if (!RangeCheck(insert))return False;
	address = &Ring_buffer.elem[insert];
	for (ElemType *p = &(Ring_buffer.elem[Ring_buffer.length - 1]); p >= address; p--) {
		*(p + 1) = *(p);
	}
	*address = date;
	Ring_buffer.length++;
	return True;
}
/*
*添加元素
*/
void add(ElemType date) {
	add(Ring_buffer.length, date);
}
/*
*线性查找某个元素
*if found date,return true
*/
Type isdexOF(ElemType date) {
	for (int *i = &Ring_buffer.elem[0]; i <= &(Ring_buffer.elem[Ring_buffer.length - 1]); i++) {
		if (date == *i)return True;
	}
	return False;
}
/*
*判断线性表是否为空
*/
Type Isempty() {
	if (Ring_buffer.length != 0)
		return False;
	return True;
}
/*
*删除线性表第i个元素
*@return:type
*@param:insert
*@param:date
*/
Type Delete(int insert, ElemType &date) {
	RangeCheck(insert);
	ElemType *address;
	address = &(Ring_buffer.elem[insert]);
	date = *address;
	for (address; address <= &(Ring_buffer.elem[Ring_buffer.length - 1]); address++) {
		*(address) = *(address + 1);
	}
	Ring_buffer.length--;
	return True;
}

/*
*判断当前操作是否合法
*@param insert
*/
Type  RangeCheck(int insert) {
	if (insert >=MAX_SIZE) {
		cout << "当前操作位置:" << insert << "操作异常,数据溢出" << endl;
		return False;
	}
	if (insert >= 0 && insert <= Ring_buffer.length) {
		return True;
	}
	return False;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值