数据结构实验顺序表,功能创建顺序表,查找顺序元素,删除顺序表元素,再插入顺序表元素
#include <stdio.h>
#include <iostream>
#define MAX 1000 //最多存放1000个数据,如果不够可以修改
using namespace std;
//函数声明
void showMenu(); //显示菜单
int creat (struct group *g1); //创造顺序表
void print(struct group *g1); //显示顺序表
void length(struct group *g1); //输出顺序表的表长
void find(struct group *g1); //查找数据,函数里面选择按值查找还是按地址查找
void insert(struct group *g1); //插入数据
void del(struct group *g1); //删除数据,函数里面选择是按地址删除还是按值删除
struct group //结构体
{
int date[MAX];
int last; //记录存放几个数据
};
int main()
{
int select = 0;
struct group g1; //定义一个存放数据的顺序表
while (1)
{
showMenu(); //显示菜单
cout<<"请输入选项"<<endl;
cin >> select;
switch (select)
{
case 1: //存放数据到顺序表里面
creat(&g1);
break;
case 2: //输出顺序表
print(&g1);
break;
case 3: //输出顺序表的表长
length(&g1);
break;
case 4: //查找数据
find(&g1);
break;
case 5: //插入数据
insert(&g1);
break;
case 6: //删除数据
del(&g1);
break;
case 0: //退出
cout << "欢迎下次使用" << endl;
system("pause");
return 0;
default:
break;
}
system("pause");
system("cls"); //清空输入的内容 清除上次操作的内容,重新显示菜单,便于操作
}
return 0;
}
void showMenu() //菜单,采用c++
{
cout << "****************************" << endl;
cout << "***** 1、建立顺序表 *****" << endl;
cout << "***** 2、输出顺序表 *****" << endl;
cout << "***** 3、顺序表表长 *****" << endl;
cout << "***** 4、查找数据 *****" << endl;
cout << "***** 5、插入数据 *****" << endl;
cout << "***** 6、删除数据 *****" << endl;
cout << "***** 0、退出 *****" << endl;
cout << "****************************" << endl;
}
int creat (struct group *g1)
{
printf("请输入你想要存放几个数据\n");
int a,i;
scanf("%d",&a);
g1->last=a; //表示存放了 a个数据
for(i=0;i<a;i++)
{
printf("请第%d个数据",i+1);
scanf("%d",&g1->date[i]);
}
for(i=0;i<a;i++)
{
printf(" %d ",g1->date[i]);
}
printf("\n");
printf("存放完毕\n");
return 0;
} //creat函数结束
void print(struct group *g1)
{
if(g1->last==0) //顺序表未存放数据情况
{
printf("该顺序表未存放数据");
return;
}
else //顺序表存放数据情况
{
printf("该顺序表的数据有\n");
int i;
for(i=0;i<g1->last;i++)
{
printf(" %5d ",g1->date[i]);
}
printf("\n");
return;
}
}
void length(struct group *g1)
{
printf("该表表长为%4d\n",g1->last); //直接输出表长
}
void find(struct group *g1)
{
int select;
printf("1.按值查找\n");
printf("2.按地址查找\n");
scanf("%d",&select);
switch(select)
{
case 1:
{
printf("请输入你要查找的数值\n");
int date,i=0;
scanf("%d",&date);
while(date!=g1->date[i]&&i<g1->last) //寻找数据的位置
{
i++;
}
if(date==g1->date[i])
{
printf("已查到%d,它是第%d个元素\n",date,i+1);
}
else
{
printf("查无数据,请检查输入\n");
}
}
break;
case 2:
{
printf("请输入你要查找第几个数据\n");
int date;
scanf("%d",&date);
if(date>0 && date<g1->last)
printf("该数据为%4d\n",g1->date[date-1]);
else
printf("输入有误,请重新输入\n");
}
break;
default:
printf("输入有误\n");
}
}
void del(struct group *g1)
{
if(g1->last==0) //顺序表无数据 情况
{
printf("顺序表未存放数据\n");
}
int select;
printf("1.按地址删除\n");
printf("2.按值删除\n");
scanf("%d",&select);
switch(select)
{
case 1:
{
printf("请输入你要删除第几个数据\n");
int date;
scanf("%d",&date);
if(date<1||date>g1->last) //想删除的数据未定义或位置不对
{
printf("输入有误,请重新输入\n");
}
int i;
for(i=date-1;i<g1->last-1;i++) //从删除位开始从前往后前移
{
g1->date[i]=g1->date[i+1];
}
g1->last--;
printf("已删除该数据\n");
}
break;
case 2:
{
printf("请输入你要删除数据的值\n");
int date;
scanf("%d",&date);
int i=0,j;
while(date!=g1->date[i]&&i<g1->last) //查找要删除的数据
{
i++;
}
if(date==g1->date[i])
{
for(j=i;j<g1->last;j++) //从删除位开始从前往后前移
{
g1->date[j]=g1->date[j+1];
}
g1->last--;
printf("已删除该数据\n");
}
else
{
printf("输出有误,未找到该数据\n");
}
}
break;
default:
printf("输出有误\n");
}
}
void insert(struct group *g1)
{
printf("请输出你要插在第几位\n");
int date,i;
cin>>date;
if(date<1||date>MAX||date>g1->last+1)
{
printf("输入有误,请重新输入\n");
}
for(i=g1->last-1;i>date-2;i--)
{
g1->date[i+1]=g1->date[i];
}
printf("请输入你要在第%d位插入的数据:",date);
int a;
cin>>a;
g1->date[date-1]=a;
g1->last++;
printf("已插入该数据\n");
}