#include<bits/stdc++.h>
#define StSize 10
using namespace std;
//结构体构造一个顺序表
typedef struct {
int length; //当前顺序表长度
int *data; //数组指针
int Maxsize; //顺序表最大长度
}SqList;
//初始化(建立空的顺序表)
void StList(SqList &L)
{
L.data = (int*)malloc(sizeof(int)); //用malloc函数申请一片空间
L.length = 0; //顺序表当前长度为0
L.Maxsize = StSize; //最大长度
}
//把元素放入顺序表
void WriteList(SqList &L)
{
cout <<"\t请输入你要创建的顺序表的长度:";
cin >> L.length;
cout <<"\t请输入"<<L.length<<"个你要放入顺序表里的元素:";
for(int i = 0;i < L.length;i++)
{
cin >> L.data[i];
}
}
//顺序表的打印
void PrintList(SqList &L)
{
if(L.data > 0)
cout << "\t顺序表里的元素有:";
for(int i = 0;i < L.length;i++)
{
cout << L.data[i]<<" ";
}
cout << endl;
}
//元素查找(按位查找)
void PoList(SqList &L)
{
int i;
cout << "\t你要查找第几个元素:";
cin >> i;
if(i < 1||i > L.length+1)
return ;
cout << "\t第"<<i<<"个元素是"<<L.data[i-1]<<endl;
}
//元素查找(按值查找)
void VaList(SqList &L)
{
int e;
int flag = 1; //做标志
cout << "\t输入你要查找的元素:";
cin >> e;
for(int i = 0;i < L.length;i++)
if(L.data[i] == e)
{
cout <<"\t找到了,是第"<<i+1<<"个元素"<<endl;
flag = 0;
break;
}
if(flag)
cout <<"\t不存在这个值"<<endl;
}
//增加顺序表的长度
void increaseList(SqList &L)
{
int Len;
int *p = L.data;
cout <<"\t输入要增加的长度:";
cin >> Len;
L.data = (int *)malloc((L.length+Len)*sizeof(int)); //加上增加的长度,重新申请空间
for(int i = 0;i < L.length;i++)
L.data[i] = p[i];
L.length = L.length+Len;
cout <<"\t现在顺序表的长度为:"<<L.length;
cout <<endl;
}
//插入元素
void InsertList(SqList &L)
{
int i, e;
cout << "\t输入需要插入的元素和它的位置:";
cin >> e >> i;
if(i<1||i>L.length+1) //判断元素下标是否越界
return;
if(L.length>L.Maxsize) //判读储存空间是否满了
return;
for(int j = L.length;j >= i;j--)
{
L.data[j] = L.data[j-1]; //从后往前逐个后移元素
}
L.data[i-1] = e;
//L.length++; //插入个元素表长加1
cout <<"\t此时";
}
//删除元素
void DeleteList(SqList &L)
{
int i,e;
cout << "\t输入要删除的元素位置:";
cin >>i;
if(i < 1 || i > L.length+1) //判断元素下标是否越界
return ;
if(!L.data)
return; //判断是否为空表
e = L.data[i-1];
for(int j = i;j <= L.length;j++)
{
L.data[j-1] = L.data[j]; //遍历查找,直接下标往前进一
break;
}
L.length--; //删除元素表长减一
cout <<"\t删除的元素是"<<e<<endl;
cout<<"\t此时";
}
//注销顺序表
void DestroyList(SqList &L)
{
char a;
getchar(); //吃掉之前操作遗留的空格
cout <<"\t是否注销顺序表(Y/N):";
cin >> a;
if(a == 'Y')
{
L.length = 0;
L.Maxsize = 0;
free(L.data); //释放空间
cout << "\t顺序表以注销"<<endl;
}
}
//主函数
int main()
{
SqList L;
StList(L);
WriteList(L);
PrintList(L);
PoList(L);
VaList(L);
increaseList(L);
InsertList(L);
PrintList(L);
DeleteList(L);
PrintList(L);
DestroyList(L);
}
运行结果: