#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;
}