#include <stdio.h>
#include <stdlib.h>
#define maxsize 100
typedef int elemtype;
typedef struct
{
elemtype elem[maxsize];
int last;
}sqlist;
sqlist l;
int size;
void displaymenu();
void creatlist(sqlist *l,int x);
void insert(sqlist *l,int i,elemtype e);
void delet(sqlist *l,int i);
int locate(sqlist *l,elemtype e);
void indicate( sqlist *l);
void main()
{
displaymenu();
}
void displaymenu()
{
elemtype e;
int k,i,j;
do
{
printf("1----------创建线性表\n");
printf("2----------定位元素\n");
printf("3----------插入元素\n");
printf("4----------打印线性表\n");
printf("5----------删除线性表中的元素\n");
printf("6----------退出\n");
printf("请输入您要进行的操作:\t\t");
scanf("%d",&k);
}while(k>6||k<1);
switch(k)
{
case 1:
system("cls");
printf("请输入您要创建的线性表的大小:\t");
scanf("%d",&size);
creatlist(&l,size);
getch();
system("cls");
displaymenu();
break;
case 2:
system("cls");
printf("请输入您要查询的元素:\t");
scanf("%d",&e);
locate(&l,e);
if(locate(&l,e)<=size)
printf("您要查询的值的位置是:%d",locate(&l,e));
else
printf("线性表中没有此元素...");
getch();
system("cls");
displaymenu();
break;
case 3:
system("cls");
printf("请输入您要插入的元素以及插入的位置:\t");
scanf("%d%d",&j,&e);
insert(&l,j,e);
getch();
system("cls");
displaymenu();
case 4:
system("cls");
printf("按任意键显示当前线性表的内容...\n");
indicate(&l);
getch();
system("cls");
displaymenu();
case 5:
system("cls");
printf("请输入你要删除的元素位置:\t\t");
scanf("%d",&j);
delet(&l,j);
indicate(&l);
getch();
system("cls");
displaymenu();
case 6:
printf("按任意键退出!");
getch();
exit(0);
}
}
void creatlist(sqlist *l,int x)
{ int i=1;
int m;
for(m=0;m<x;m++)
{
printf("请输入您要创建的第%d个元素:\t",i);
scanf("%d",&l->elem[m]);
i++;
l->last++;
}
}
int locate(sqlist *l,elemtype e)
{
int loc=0;
while(loc<size&&l->elem[loc]!=e)
{
loc++;
}
if(loc<=size)
return(loc+1);
else
return(-1);
}
void insert(sqlist *l,int i,elemtype e)
{
int n;
if(i>l->last+1||i<1)
{
printf("插入位置不合法,请重新插入...");
}
else if(l->last+1>maxsize)
{
printf("内存溢出!");
}
else
{
size++;
for(n=l->last;n>=i;n--)
{
l->elem[n]=l->elem[n-1];
}
l->elem[i-1]=e;
printf("插入成功!");
getch();
}
}
void indicate(sqlist *l)
{
int i;
int space=1;
for(i=0;i<size;i++)
{
printf("%d\t\t",l->elem[i]);
if(space%5==0)
{
printf("\n");
}
space++;
}
}
void delet(sqlist *l,int i)
{
elemtype e;
int loc;
e=l->elem[i-1];
for(loc=i;loc<=size;loc++)
{
l->elem[loc-1]=l->elem[loc];
}
size--;
}