#include<stdio.h>
#include<stdlib.h>
#define InitSize 10//顺序表的初试长度
typedef struct SeqList{
//typedef 把结构体struct 重命名为SeqList
int *data;
int MaxSize;
int length;
};
void InitList(SeqList &L){
//顺序表
L.data=(int *)malloc(InitSize*sizeof(int));
L.length=0;
L.MaxSize=InitSize;
}
//增加动态分配的内存空间
void IncreaseSize(SeqList &L,int len){
int *p=L.data;
L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
for(int i=0;i<L.length;i++){
L.data[i]=p[i];
}
L.MaxSize=L.MaxSize+len;
free(p);
}
//插入操作
//在顺序表第i个位置 插入e
void ListInsert(SeqList &L,int i,int e){
//提高算法的健壮性
if(i>L.length+1||i<1){
printf("输入错误 不符合顺序表原则\n");}
else if(L.length==L.MaxSize){
printf("插入失败 顺序表已满\n");}
else {
//从下往上递进 从插入i的位置 从上往下赋值 把最底下的值赋给下一个 直到插入位置
for(int j=L.length;j>=i;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=e;
L.length++;
for(int i=0;i<L.MaxSize;i++){
printf("%d\n",L.data[i]);}
}
}
//&e把此次删除的数据元素返回 引用型的数据元素
bool ListDelete(SeqList &L,int i,int &e){
if(i>L.length+1||i<1)
return false;
else {
e=L.data[i-1];//将被删除的元素赋值给e
//从删除的位置 往下递进 即从上往下递进 从下往上赋值 把下面一个值赋给上一个
for(int j=i;j<L.length;j++)
L.data[j-1]=L.data[j];
L.length--;
for(int i=0;i<L.MaxSize;i++)
printf("%d\n",L.data[i]);
}
return true;
}
//查询操作
int selectlocal(SeqList L,int i)
{
return L.data[i-1];
}
int selectworth(SeqList L,int i)
{
for(int m=0;m<L.length;m++)
if(L.data[m]==i)
return m+1;//返回值i 所在的位置
return 0;
}
int main(){
SeqList L;//定义顺序表L
InitList(L);
IncreaseSize(L,5);
for(int i=0;i<L.MaxSize;i++){
L.data[i]=i;
L.length++;
}
int e=-1;//用变量e 把删除的元素带回来 在内存中会为e开辟空间
ListInsert(L,9,100);//往顺序表里进行插入操作
if((ListDelete(L,3,e)))
{
printf("已删除第3个元素,删除元素值为=%d\n",e);
}
else
printf("位序i不合法,删除失败\n");
int var= selectlocal(L,2);
//按位查找输出
printf("%d\n",var);
int worth=selectworth(L,1);
printf("%d\n",worth);
return 0;
}
运行结果