数据结构之顺序表

用一组地址连续的存储单元依次存放线性表中的数据元素,此时逻辑上连续的线性表在物理地址上连续
template 
class SqList
{
public:
	SqList(int m = 0);
	~SqList();
	bool IsEmpty()const { return len <= 0; }
	int  Length()const { return len; }
	void Clear() { len = 0; }
	bool GetElem(ElemType&, int) const;
	bool SetElem(const ElemType&, int);
	int LocatePrior(const ElemType&) const;
	int LocateNext(const ElemType&) const;
	void Traverse(void(*visit)(const ElemType &)) const;

	bool OrderInsert(const ElemType&, int);//插入算法
	bool OrderDelete(ElemType&, int);
	int LocateElem(const ElemType&) const;
	bool TailInsert(const ElemType&);//追加

	int BinarySearch(ElemType &);  //折半查找	   // bool sort();          //升序、降序
	int del(SqList &L);   //新增方法,删除顺序表中值相同的元素的函数
	void reverse(SqList &L);       //新增方法,对顺序表中元素进行逆置的函数
	void Del_x(ElemType x); //删除顺序表中和给定值相同的数据元素
	void del2(SqList &L);//将无序顺序表中值相同的元素删除部分,保留一个
private:
	int len;
	int size;      //分配给顺序表的空间大小
	ElemType *elem; //elem一维数组
};
template
SqList::SqList(int m)
{
    len=0;//初始化时数组长度位0
    if(m==0)//如果m为0则不创建
       elem=NULL;//将数组置为空
    else
       elem=new ElemType[m];//如果不为0则开辟数组空间为大小为m
     size=m;//将数组长度size计为m
}

/*析构函数*/
template
SqList::~SqList()
{
   delete []elem;//释放空间
}

/*取元素*/
template
bool SqList::GetElem(ElemType &e,int i)const
{
   if(i<1||i>len)//合法性判断
      return false;
   else 
      e=elem[i-1];
   return true;
}

/*设置元素*/
template
bool SqList::SetElem(const ElemType &e,int i)
{
   if(i<1||i>len)
      retrun false;
   elem[i-1]=e;//将e存放在elem的第i个位置,由于数组是从0位置起
   return true;
}


/*查找元素*/
template
int SqList::LocateElem(const ElemType &e)const
{
  int i=1;
  while(i
int SqList::LocatePrior(const ElemType &e)const
{
   int i=LocateElem(e);
   if(i>1)//第一个元素没有前驱
      return i-1;
   return 0;
}

/*查找元素的后继*/
template
int SqList::LocateNext(const ElemType &e)const
{
   int i=LocateNext(e);
   if(i
bool SqList::OrderInsert(const ElemType&, int)
{
   if(i>len+1||i<1)//合法性判断
      return false;
   if(len>=size)//表满则扩展
   {
      ElemType *newbase;
      newbase=new ElemType[size+10];
      if(!newbase)
         return false;
      for(int j=0;j=i-1;--p)//从最后一个移动后移
      elem[p+1]=elem[p];
   elem[i-1]=e;//将i号元素赋值e
   ++len;//长度加1
   return true;
}


/*删除元素*/
template
bool SqList::OrderDelete(ElemType&, int)
{
   if(i>len||i<1)//判断合法性
     return false;
   for(int p=i;p<=len;p++)//从前往后移动
     elem[p-1]=elem[p];//赋值
   --len;//长度减少1
   return true;
}



temaplate
bool SqList::TailInsert(const ElemType&)//追加
{
    if(len>=size)
    {
      ElemType *newbase;
      newbase=new ElemType[size+10];
      if(!newbase)
         return false;
      for(int j=0;j
/*折半查找*/
template
int SqList::BinarySearch(ElemType &key)
{
    int low=0,high=len-1;
    while(low<=high)//循环条件
    {
      int mid=(low+high)/2;
      if(elem[mid]==key)
          return mid;
      else if(elem[mid]
int SqList::del(SqList &L)
{
    int i,j;
    for(i=0;i
内容概要:本文深入解析了扣子COZE AI编程及其详细应用代码案例,旨在帮助读者理解新一代低门槛智能体开发范式。文章从五个维度展开:关键概念、核心技巧、典型应用场景、详细代码案例分析以及未来发展趋势。首先介绍了扣子COZE的核心概念,如Bot、Workflow、Plugin、Memory和Knowledge。接着分享了意图识别、函数调用链、动态Prompt、渐进式发布及监控可观测等核心技巧。然后列举了企业内部智能客服、电商导购助手、教育领域AI助教和金融行业合规质检等应用场景。最后,通过构建“会议纪要智能助手”的详细代码案例,展示了从需求描述、技术方案、Workflow节点拆解到调试与上线的全过程,并展望了多智能体协作、本地私有部署、Agent2Agent协议、边缘计算插件和实时RAG等未来发展方向。; 适合人群:对AI编程感兴趣的开发者,尤其是希望快速落地AI产品的技术人员。; 使用场景及目标:①学习如何使用扣子COZE构建生产级智能体;②掌握智能体实例、自动化流程、扩展能力和知识库的使用方法;③通过实际案例理解如何实现会议纪要智能助手的功能,包括触发器设置、下载节点、LLM节点Prompt设计、Code节点处理和邮件节点配置。; 阅读建议:本文不仅提供了理论知识,还包含了详细的代码案例,建议读者结合实际业务需求进行实践,逐步掌握扣子COZE的各项功能,并关注其未来的发展趋势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值