线性表

#include<iostream>
#include<stdlib.h>
using namespace std;


//顺序表定义。表中元素为int类型==================================================================================
typedef  struct
{
int  len; //当前表长

int  *elem; //表中元素为int类型

int listsize;//最多元素个数

  }SeqList;


int InitList (SeqList &L,int n) //初始化一个线性表,最大长度为n====================================================
      
{     
  L.elem = (int*)malloc(n*sizeof(int)); //为线性表申请n个空间
  //也可以写成:L.elem = new int[n];

  if(!L.elem)exit(0); //分配失败,返回0

  L.len=0;            //分配成功,当前元素个数置零
 
  L.listsize=n;     //修改最大元素个数listsize
 
  return 1;           //成功!
 }

int Destroy(SeqList &L) //释放线性表空间====================================================
      
{     
  free(L.elem);
  
  L.len=0;            //元素个数置零
 
  L.listsize=0;     //修改最大元素个数listsize为0
 
  return 1;           //完成!
 }


int FLocate(SeqList &L,int e) //从头开始查找e====================================================
{   
    L.elem[0]=e;     //把e放在下标为0的位置

    int i=1;//从下标为1开始查找
       
 while((i<=L.len)&&(L.elem[i]!=e))i++;//依次搜索
       
   if(L.elem[i]==e)  return i;   //找到
   else   return  0;    //没找到,返回0。
}


int LLocate(SeqList &L,int e) //从最后一个元素开始查找====================================================
{
  int i=L.len;//从最后开始

  L.elem[0]=e;    //设首元素为0

  while(L.elem[i]!=e)  //还没找到
  i--;                     
  return i;   //如果存在此元素,找到时跳出循环。返回下标
                   //如果不存在,则搜索至下标为0时结束。返回0
}
/*void init(SeqList l,int n)
{
 int a=0,b=l.len;
  int tem;

 while(b-a>1 || l.elem[a]!=n)
 {
  tem=(a+b)/2;
  if(n >= l.elem(tem)) a = tem;
  
  else b = tem;  
 }

 l.len +=1;
 int len1=l.len;
 while (len1>a)
 {
  l.elem[len1]=l.elem[len1-1];
  len1--;
 }
  l.elem[len1] = n; 
}
*/

 

int main()
{
//======================初始化线性表=============================================
 cout<<"初始化线性表:"<<endl;

SeqList L;

 if(InitList(L,6)==1)  //初始化一个线性表,最大长度为6
 {
 cout<<"初始化成功!"<<endl;
    cout<<"当前线性表的元素个数为:"<<L.len<<",最大可容纳元素个数:"<<L.listsize<<endl;
 }

else  {
 cout<<"初始化失败!"<<endl;
  
 }

system("pause");


//=====================输入1~5共5个元素==============================================

   for(int i=1;i<=5;i++)
  {
   cout<<"请输入线性表第"<<i<<"个元素:"<<endl;
   cin>>L.elem[i];
  }

   L.len=5;   //修改当前表中元素的个数

   cout<<"当前线性表的元素个数为:"<<L.len<<",最大可容纳元素个数:"<<L.listsize<<endl;

  
  //=======================================
   int n;
   cout<<"输入n的值"<<endl;
   cin>>n;
  int a=0,b=L.len;
  int tem;

 while(b-a>1 || L.elem[a]!=n)
 {
  tem=(a+b)/2;
  if(n >= L.elem[tem]) a = tem;
  
  else b = tem;  
 }

 L.len +=1;
 int len1=L.len;
 while (len1>a)
 {
  L.elem[len1]=L.elem[len1-1];
  len1--;
 }
  L.elem[len1] = n; 
  cout<<"ok"<<endl;
return 0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值