#include<bits/stdc++.h>
using namespace std;
#include <stdio.h>
#include <malloc.h>
#define initsize 10
//定义一个顺序表
typedef struct //定义一个动态顺序表的结构体,并起别名为sqlist
{
int *data; //因为是动态数组,所以先定一个指针,表示数组,后面malloc动态分配即可
int max;
int length;
}sqlist;
//顺序表的初始化
void initlist(sqlist &l)//初始化顺序表操作,并创建动态数组
{
l.data=(int*)malloc(sizeof(int)*initsize);
l.length=0;
l.max=initsize;
}
//顺序表插入 o(n)
bool insertlist(sqlist &l,int i,int k)
{
if(i<1||i>l.length+1)//元素必须挨着,若果插入位置超过当前长度,则无效
return false;
if(l.length>=l.max+1)//如果当前长度超过最大容量,也无效
return false;
int p;
for(p=l.length;p>=i;p--)//从末尾,依次赋值位移
l.data[p]=l.data[p-1];
l.data[i-1]=k; //插入元素
l.length++;
}
//顺序表删除 o(n)
bool deletelist(sqlist &l,int i,int k)
{
if(i<1||i>l.length)
return false;
k=l.data[i-1];
int m;
for(m=i;m<l.length;m++)
{
l.data[m-1]=l.data[m];
}
l.length--;
}
//按位查找 o(1)
int GetElem(sqlist &l,int i)
{
return l.data[i-1];
}
//按值查找一个元素 o(n)
int LocateElem(sqlist &l,int e) //e为要查找的值
{
for(int i=0;i<l.length;i++)
if(l.data[i]==e)
return i+1;
return false;
}
int main()
{
sqlist l;
initlist(l);
//给顺序表赋初始值
int i;
printf("max=%d\n",l.max);
for(i=0;i<5;i++)
{
l.data[i]=i+1;
l.length++;
printf("%d ",l.data[i]) ;
}
//进行插入操作
insertlist(l,3,3);
int u;
printf("\n");
//验证是否插入成功
printf("插入一个元素 \n");
for(u=0;u<l.length;u++)
{
printf("%d ",l.data[u]);
}
deletelist(l,3,3);
//删除一个元素
printf("删除一个元素\n");
int y;
for(y=0;y<l.length;y++)
{
printf("%d ",l.data[y]);
}
cout<<endl;
//按位查找一个元素
printf("%d",GetElem(l,3));
cout<<endl;
//按值查找一个元素
printf("%d",LocateElem( l,4));
return 0;
}