前插法实现链表
#include <iostream>//顺序表
#include <string>
#include <iomanip>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERLOW -2
#define MAXSIZE 10
typedef struct{
int *elem;
int length;
}SqList;
void prin(SqList L){//输出
for(int i=0;i<=L.length-1;i++){
cout<<L.elem[i]<<"\t";
}
cout<<endl;
}
void InitList(SqList &L){//初始化
L.elem=new int(MAXSIZE);
if(!L.elem){
cout<<"创建空表失败"<<endl;
}else{
L.length=0;
cout<<"创建空表成功"<<endl;
}
}
void innt(SqList &L){//输入值
int i,a[MAXSIZE],in=1;
cout<<"请输入您想要输入进空表的内容,并以0结尾"<<endl;
for(i=0;i<MAXSIZE&∈i++){
cin>>in;
a[i]=in;
}
for(i=0;i<MAXSIZE&&a[i];i++)
{
L.elem[i]=a[i];
++L.length;
}
cout<<"输入值成功,输入后表中数据为:"<<endl;
prin(L);
}
void GETELEM(SqList L){//取值
int i;
cout<<"请输入您想知道第几个元素的数值"<<endl;
cin>>i;
if(i<1||i>L.length){
cout<<"您输入的数值错误,请重新选择"<<endl;
}else{
cout<<"您需要的数据为"<<L.elem[i-1]<<endl;
}
}
void LocateElem1(SqList L){//值查找
int i=0,e;
cout<<"请输入您要查找的"<<endl;
cin>>e;
for(;i<L.length&&L.elem[i]!=e;i++);
if(L.elem[i]==e){
cout<<"您输入的值以查到,该值在表中第"<<i<<"位"<<endl;
}else{
cout<<"您查找的元素不存在"<<endl;
}
}
void LocateElem2(SqList L){//地址查找
int e;
cout<<"请输入您所要查找的是第几位元素"<<endl;
cin>>e;
if(e>L.length)
cout<<"您查找的值不存在"<<endl;
else
cout<<"您所查找的第"<<e<<"位元素的值为:"<<L.elem[e-1]<<endl;
}
void ListInsert(SqList &L){//插入,i为插入位置
int j,i,e;
cout<<"请输入您所想要在第几位插入数值"<<endl;
cin>>i;
cout<<"请输入您想要插入数值"<<endl;
cin>>e;
if((i<1)||(i>L.length+1)){
cout<<"您输入的值错误,请重新选择"<<endl;
}else{
for(j=L.length-1;j>=i-1;j--){
L.elem[j+1]=L.elem[j];
}
L.elem[i-1]=e;
++L.length;
cout<<"您插入数值成功,插入后的表为:"<<endl;
prin(L);
}
}
void ListDelete(SqList &L){//删除
int f;
cout<<"请输入您想要删除第几位元素"<<endl;
cin>>f;
int j;
if((f<1)||(f>L.length)){
cout<<"输入错误"<<endl;
}else{
for(j=f;j<=L.length-1;j++)
L.elem[j-1]=L.elem[j];
--L.length;
cout<<"已删除第"<<f<<"位元素,删除后的顺序表为:"<<endl;
prin(L);
}
}
int main(int argc, const char * argv[]) {
int temp,choose;
SqList L;
cout << "请输入你想选择的项目"<<endl<<"1.创建空表"<<endl<<"2.输入"<<endl<<"3.取值"<<endl<<"4.查找"<<endl<<"5.插入"<<endl<<"6.删除"<<endl<<"0.退出"<<endl;
choose=1;
while(choose){
cin>>choose;
switch (choose) {
case 1://创建空表
InitList(L);
break;
case 2://顺序表信息输入
innt(L);
break;
case 3://取值
GETELEM(L);
break;
case 4://查找
cout<<"请选择需要按值查找还是按地址查找"<<endl<<"1.按值查找"<<endl<<"2.按地址查找"<<endl;
cin>>temp;
switch (temp) {
case 1://按值查找
LocateElem1(L);
break;
case 2://按地址查找
LocateElem2(L);
break;
default:
break;
}
break;
case 5://插入
ListInsert(L);
break;
case 6://删除
ListDelete(L);
break;
default:
cout<<"您输入的数值错误,请重新输入。"<<endl;
break;
}
}
return 0;
}