#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<iostream>
using namespace std;
#define ListSize 100//最大允许长度
typedef int ListData;
typedef struct{
ListData *data;//存储数组
int length;//当前元素个数(长度)
}SeqList;
ListData InitList(SeqList &L)//建立空的顺序表
{
L.data=(ListData*)malloc
(ListSize*sizeof(ListData));
if(L.data==NULL){
printf("存储分配失败!/n");
exit(1);
}
L.length=0;
return 1;
}
ListData Creat_SeqList(SeqList &L)//自定义创建顺序表数据
{
int c,i=0;
cout<<"请输入自定义数据,按Ctrl+Z结束"<<"/n"<<endl;
while(scanf("%d",&c)!=EOF)//按Ctrl+Z组合键结束输入
{
if(i>=ListSize)//自定义数据表超过初始化大小
{
cout<<"自定义数据表超过初始化大小"<<endl;
}
L.data[i++]=c;
}
L.length=i;
cout<<"/n"<<endl;
return 0;
}
ListData Print(SeqList &L,int length)
{
int i;
printf("表中元素是:");
for(i=0;i<L.length;i++)
printf(" %d ",L.data[i]);
printf("/n共有元素 %d 个/n",L.length);
return 0;
}
ListData Length(SeqList &L){
return L.length;
}
ListData GetData(SeqList &L,int i)//查找元素按位置查找
{
if(i>=0&&i<L.length)
return L.data[i];
else printf("参数i不合理!/n");
}//在出错情况,函数不能用
ListData Find ( SeqList &L, ListData x ) {//按值查找
int i = 0;
while ( i < L.length && L.data[i] != x )
i++;
if ( i < L.length )
return i;
else
return -1;
}
ListData Insert(SeqList &L,int i,ListData x){//在表中第i个位置插入新元素x
if(i<0||i>L.length||L.length==ListSize)
{printf("输入不合法,插入不成功/n");
return 0;//插入不成功
}
else{
for(int j=L.length;j>i;j--)
L.data[j]=L.data[j-1];
L.data[i]=x;L.length++;
printf("插入成功/n");
return 1;//插入成功
}
}
int Delete(SeqList &L,ListData x)//在表中删除已有元素x
{int i=Find(L,x);//在表中查找x
if(i>=0){
L.length--;
for(int j=i; j<L.length;j++)
L.data[j]=L.data[j+1];
cout<<"成功删除"<<endl;
return 1;//成功删除
}
cout<<"表中没有x"<<endl;
return 0;//表中没有x
}
int main()
{ cout<<" *------------------------------------------*"<<endl;
cout<<" * *"<<endl;
cout<<" * 1.......建立顺序表 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 2.......输入数据 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 3.......显示数据 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 4.......按位置插入数据 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 5.......按位置查找数据 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 6.......按值查找数据 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 7.......删除数据 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 0...........退出 *"<<endl;
cout<<" * *"<<endl;
cout<<" *------------------------------------------*"<<endl;
SeqList L;
int length;
int i,x;
while(1)
{
switch(getch())
{
case '1': InitList(L);
if(!L.length)
printf("建立空表成功,请按2输入数据/n");
else printf("建立失败/n");
break;
case '2': Creat_SeqList(L);
if(L.length)
printf("顺序表建立成功,按3显示数据/n");
else printf("建立失败/n");
break;
case '3': if(L.length)
Print(L,L.length);
else printf("空表/n");
break;
case '4': if(L.length)
{
printf("输入插入的位置i:");
scanf("%d",&i);
printf("输入插入的元素:");
scanf("%d",&x);
if(Insert(L,i,x))
printf("插入成功,按3显示/n");
}
else printf("未建立顺序表/n");
break;
case '5': if(L.length)
{
printf("输入查找位置:/n");
scanf("%d",&i);
while(i>L.length|| i<1)
{
printf("输入位置错误,请重新输入:/n");
scanf("%d",&i);
}
printf("第%d个元素是:%d/n",i,GetData(L,i));
}
else printf("未建立顺序表/n");
break;
case '6': if(L.length)
{
printf("输入查找数据:/n");
scanf("%d",&x);
if(Find(L,x))
printf("%d在表中是第%d个元素/n",x,Find(L,x));
else printf("该表中没有%d这个元素./n",x);
}
else printf("未建立顺序表/n");
break;
case '7':if(L.length)
{
printf("输入删除元素的位置:");
scanf("%d",&x);
if(Delete(L,x))
printf("删除成功,按3显示/n");
}
else printf("未建立顺序表/n");
break;
case '0':exit(0);break;
default : printf("操作错误/n");break;
}
}
getch();
}