#include<iostream>
#include<stdlib.h>
#define MAX 10
using namespace std;
typedef struct Sqlist
{
int *elem; //储存空间的基地址
int length; //当前长度
int listsize; //动态分配的存储空间,这点为数组所不能
}Sqlist;
void Create(Sqlist *L)
{
L=(Sqlist*)malloc(sizeof(Sqlist));
cout<<"创建完成!"<<endl;
}
void Init(Sqlist *L)
{
L->elem=(int*)malloc(sizeof(int)*MAX);
L->length=1; //表示顺序表为空,因为此时是初始化操作
L->listsize=MAX; //此时存储下新申请的个数
cout<<"初始化完成!"<<endl;
}
void Insert(Sqlist *L,int x,int y)
{
if(x>L->length)
cout<<"插入下标大于顺序表的长度!"<<endl;//注意此时如果用void可能无法因输入值的问题而跳过此函数
if(L->length==L->listsize)
cout<<"存储空间已满无法继续存储!"; //先忽略不管怎么处理
for(int i=L->length;i>x;i--) //把要插入的元素的地方腾出来
{
L->elem[i]=L->elem[i-1]; //腾地方
}
L->elem[x]=y;
L->length++;
}
void Delete(Sqlist *L,int t)
{
int index=-1; //用来记录找到元素的下标
for(int i=0;i<L->length;i++)
{
if(L->elem[i]==t)
{
index=t;
break;
}
}
for( ;index<L->length-1;index++)
L->elem[index]=L->elem[index+1];
L->length--;
}
void Destroy(Sqlist *L)
{
free(L->elem);
L->length=0;
L->listsize=0;
cout<<"销毁成功!"<<endl;
}
void Show(Sqlist *L)
{
for(int i=1;i<L->length;i++)
cout<<L->elem[i]<<' ';
cout<<endl;
}
void Locate(Sqlist *L,int t)
{
cout<<"你所找的元素下标对应的元素是: "<<L->elem[t]<<endl;
}
int main()
{
Sqlist L;
int x,y,n,t;
do
{
cout<<"1. 创建一个顺序表"<<endl;
cout<<"2. 初始化一个顺序表"<<endl;
cout<<"3. 在顺序表中插入元素"<<endl;
cout<<"4. 删除指定的元素"<<endl;
cout<<"5. 销毁一个顺序表"<<endl;
cout<<"6. 输出顺序表"<<endl;
cout<<"7. 查找某一元素的位置"<<endl;
cout<<"***请选择你的操作:";
cin>>n;
switch(n)
{
case 1:
Create(&L);
break;
case 2:
Init(&L);
break;
case 3:
cout<<"请输入插入的位置(x),插入的元素(y)"<<endl;
cin>>x>>y; //x表示插入的位置,y表示插入的元素
Insert(&L,x,y);
break;
case 4:
cout<<"请输入删除元素的下标:";
cin>>t;
Delete(&L,t);
break;
case 5:
Destroy(&L);
break;
case 6:
Show(&L);
break;
case 7:
cout<<"输入你想查找的元素的下标:";
cin>>t;
Locate(&L,t);
break;
default:
break;
}
cout<<endl;
}while(n>=1&&n<=7);
}