#include<iostream>
#include<stdlib.h>
using namespace std;
typedef int elemtype;
typedef int status;
#define maxsize 15
typedef struct
{
elemtype* elem;
int length;
}sqlist;
void menu();//申明顺序表菜单函数
status initiallist(sqlist& l)
{
l.elem = new elemtype[maxsize];
if (l.elem == 0)
{
cout << "空间分配失败" << endl;
return false;
}
else
{
l.length = 0;
cout << "顺序表初始化成功" << endl;
return true;
}
}//顺序表初始化
void listput(sqlist& l,int n)
{
int t;
for (int i = 0; i <n; i++)
{
cout << "请输入第" << i + 1 << "个数据" << endl;
cin >> t;
l.elem[i] = t;
l.length++;
}
}//顺序表数据输入
void sortlist(sqlist& l)
{
int i, j, t;
for (i = 0; i < l.length - 1; i++)
{
for (j = 0; j < l.length - i - 1; j++)
{
if (l.elem[j + 1] < l.elem[j])
{
t = l.elem[j];
l.elem[j] = l.elem[j + 1];
l.elem[j + 1] = t;
}
}
}
}//线性表排序(小到大)
void listoutput(sqlist l)
{
int i;
for (i = 0; i < l.length; i++)
{
cout << "第" << i + 1 << "个元素为:" << l.elem[i] << endl;
}//顺序表的输出
}
void insertdata(sqlist& l, int i, int n)
{
int t;
if (i < 1 || i>l.length + 1)
{
cout << "输入位置有错" << endl;
return;
}
if (l.length + 1 > maxsize)
{
cout << "表满了不能插入数据了" << endl;
return;
}
else
{
for (t = l.length - 1; t >= i-1; t--)
{
l.elem[t + 1] = l.elem[t];
}
l.elem[i-1] = n;
l.length++;
listoutput(l);
}
}//顺序表在特定位置插入数据
void sortinsert(sqlist& l, int n)
{
int i;
i = l.length - 1;
int j;
j = l.length - 1;
if (l.length == maxsize)
{
cout << "满了不能插入数据" << endl;
}
else
{
while (i >= 0 && n <= l.elem[i])
{
i--;
}
for (j; j > i; j--)
{
l.elem[j + 1] = l.elem[j];
}
l.elem[i+1] = n;
l.length++;
listoutput(l);
}
}
//线性表(有序后)插入数据后仍然有序
void deletedata(sqlist& l, int i)
{
int t;
if (i > l.length||i < 1)
{
cout << "删除位置有错" << endl;
return;
}
else
{
cout << "删除的数据为" << l.elem[i - 1] << endl;
cout << "删除数据后顺序中数据为" << endl << endl;
for (t = i - 1; t < l.length - 1; t++)
{
l.elem[t] = l.elem[t + 1];
}
l.length--;
listoutput(l);
}
}
// 线性表删除数据
void listfind(sqlist& l, int n)
{
if (n < 1 || n>l.length)
{
cout << "查找位置有错,请重新输入" << endl;
}
else
cout << "该元素为" << l.elem[n - 1] << endl;
}
int main()
{
menu();//线性表
}
void menu()
{
int t,m,n;
sqlist l;
while (1)
{
cout << endl;
cout << "根据所做操作选择以下数字序号" << endl;
cout << "1:创建顺序表 " << '\t' << "2:执行输入操作 " << '\t' << "3:执行删除操作" << endl;
cout << "4:执行输出操作 " << '\t' << "5:执行查找操作 " << '\t' << "6:执行排序操作" << endl;
cout << "7:执行有序表的插入操作" << '\t' <<"8:执行插入操作" << '\t'<<'\t'<< "0:退出" << endl;
cin >> t;
switch (t)
{
case 1:
initiallist(l);
system("pause");
system("cls");
break;
case 2:
cout << "请输入要输入数据个数" << endl;
cin >> m;
listput(l,m);
system("pause");
system("cls");
break;
case 3:
cout << "请输入删除元素的位置" << endl;
cin >> m;
deletedata(l,m);
system("pause");
system("cls");
break;
case 4:
listoutput(l);
system("pause");
system("cls");
break;
case 5:
cout << "输入查找元素的位置" << endl;
cin >> m;
listfind(l, m);
system("pause");
system("cls");
break;
case 6:
sortlist(l);
system("pause");
system("cls");
break;
case 7:
cout << "请输入一个数据" << endl;
cin >> m;
sortinsert(l, m);
system("pause");
system("cls");
break;
case 8:
cout << "请输入插入数据" << endl;
cin >> m;
cout << "请输入插入位置" << endl;
cin >> n;
insertdata(l, n, m);
system("pause");
system("cls");
break;
case 0:
cout << endl << endl;
cout <<'\t'<< "谢谢使用"<<'\t'<< "欢迎下次再来" << endl;
return;
default:
cout << "输入错误请重新输入" << endl;
system("pause");
system("cls"); break;
}
}
}