#include"stdio.h"
#include"stdlib.h"
#include"conio.h"
#define LIST_SIZE 1000
typedef struct{
int length;
int data[LIST_SIZE];
}SqList;
void List_Init(SqList &L) //线性表初始化
{int i;
for(i=0;i<=LIST_SIZE-1;i++)
L.data[i]=NULL;
L.length=0;
}
void List_Insert(SqList &L,int i,int e)
{
if(i<1||i>L.length+1) {printf("此位置不在允许范围!\n");}
else if(L.length>=LIST_SIZE)
printf("储存空间不足\n");
else{
int *q=&L.data[i-1];
for(int *p=&L.data[L.length-1];p>=q;--p) *(p+1)=*p;
*q=e;
++L.length;
printf("插入成功!\n");
}
}
void List_Delete_Pos(SqList &L,int i)
{ if(i<1||i>L.length+1) {printf("此位置不在允许范围!\n");}
else{
int *q=&L.data[i-1];
for(int *p=&L.data[L.length-1];p>=q+1;q++) *q=*(q+1);
--L.length;
printf("删除成功!\n") ;
}
}
void List_Delete_Elem(SqList &L,int e)
{
int j,count=0;
for(j=0;j<=L.length-1;j++)
if(L.data[j]==e)
{
int *q=&L.data[j];
for(int *p=&L.data[L.length-1];p>=q+1;q++) *q=*(q+1);
--L.length; count++;
printf("删除成功!次数:%d\n",count) ;
}
if(count==0) printf("顺序表中未找到此元素!\n");
}
void List_Replce_Pos(SqList &L,int i,int e)
{
if(i<1||i>L.length+1) {printf("此位置不在允许范围!\n");}
else{ L.data[i-1]=e; printf("替换成功!\n") ;}
}
void List_Replace_Elem(SqList &L,int e,int a)
{
int j,count=0;
for(j=0;j<=L.length-1;j++)
if(L.data[j]==e)
{
L.data[j]=a;count++;
printf("替换成功!次数:%d\n",count);
}
if(count==0) printf("顺序表中未找到此元素!\n");
}
void List_Find_Pos(SqList &L,int i)
{ if(i<1||i>L.length+1) {printf("此位置不在允许范围!\n");}
else printf("此位置的元素为:%d\n",L.data[i-1]);
}
void List_Find_Elem(SqList &L,int e)
{
int j,flag=0;
printf("经查找,结果如下:\n");
for(j=0;j<=L.length-1;j++)
if(L.data[j]==e)
{
printf("位置:%d ",j+1);
flag=1;
}
if(flag==0) printf("线性表中没有找到此元素!");
printf("\n");
}
void List_Show_All(SqList &L)
{ int j;
printf("线性表中所有元素如下:\n");
for(j=0;j<=L.length-1;j++)
printf("%d\n",L.data[j]);
}
void List_Show_Length(SqList &L)
{
printf("线性表长度为:%d\n",L.length);
}
void List_Clear(SqList &L)
{
List_Init(L);
printf("线性表已清空!\n");
}
void mainmenu()
{
printf("**********顺序表操作功能菜单***************\n");
printf("1.插入元素 2.按位置删除 \n");
printf("3.按元素删除 4.按位置查找 \n");
printf("5.按元素查找 6.查看所有元素 \n");
printf("7.查看表长 8.清空表 \n");
printf("9.按位置替换 10.按元素替换 \n");
printf("11.退出程序 \n");
printf("*******************************************\n");
}
int main()
{
SqList L;
List_Init(L);
loop:
mainmenu();
int x;
int i,e;
printf("请输入功能选项的相应序号:\n");
scanf("%d",&x);
system("cls");
switch(x)
{
case 1:
printf("请输入要插入元素的位置和要插入的元素的值:\n");
scanf("%d%d",&i,&e);
List_Insert(L,i,e);
system("pause");
system("cls");
goto loop;
break;
case 2:
printf("请输入要删除元素的位置:\n");
scanf("%d",&i);
List_Delete_Pos(L,i);
system("pause");
system("cls");
goto loop;
break;
case 3:
printf("请输入要删除的元素的值:\n");
scanf("%d",&e);
List_Delete_Elem(L,e);
system("pause");
system("cls");
goto loop;
break;
case 4:
printf("请输入要查找元素的位置:\n");
scanf("%d",&i);
List_Find_Pos(L,i);
system("pause");
system("cls");
goto loop;
break;
case 5:
printf("请输入要查找的元素的值:\n");
scanf("%d",&e);
List_Find_Elem(L,e);
system("pause");
system("cls");
goto loop;
break;
case 6:
List_Show_All(L);
system("pause");
system("cls");
goto loop;
break;
case 7:
List_Show_Length(L);
system("pause");
system("cls");
goto loop;
break;
case 8:
List_Clear(L);
system("pause");
system("cls");
goto loop;
break;
case 9:
printf("请输入被替代元素的位置和替代元素的值:\n");
scanf("%d%d",&i,&e);
List_Replce_Pos(L,i,e);
system("pause");
system("cls");
goto loop;
break;
case 10:
printf("请输入被替代元素的值和替代元素的值:\n");
scanf("%d%d",&e,&i);
List_Replace_Elem(L,e,i);
system("pause");
system("cls");
goto loop;
break;
case 11:
printf("感谢您的使用!!\n");
system("pause");
return 0;
default:
printf("输入有误!\n");
system("pause");
system("cls");
goto loop;
break;
}
return 0;
}