#include <stdio.h>
#define MAXSIZE 10 //线性表的最大长度
#define OK 1
#define ERROR 0
typedef int ElemType;//顺序表中存放整形元素
typedef struct
{
ElemType elem[MAXSIZE];
int last;
}SeqList;
/*查找操作(按内容查找)*/
int Locate(SeqList L,ElemType e)
{
int i=0;//i为计数器
while((i<=L.last)&&L.elem[i]!=e)
i++;
if(i<L.last)
return(i+1);//若找到,返回其序号
else
return(-1);//若没找到,返回-1
}
/*查找操作(按序号查找)*/
int GetData(SeqList L,int num)
{
if(num<=L.last)
return(L.elem[num-1]);
}
/*插入操作:在第i个数据元素之前插入一个元素e*/
int InsList(SeqList *L,int i,ElemType e)
{
/*判断插入位置是否合法*/
if((i<1)||(i>L->last+2))
{
printf("插入位置不合法");
return(ERROR);
}
/*判断表是否已满*/
if(L->last>=MAXSIZE-1)
{
printf("表已满,无法插入");
return(ERROR);
}
int k;
for(k=L->last;k>=i-i;k--)
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;
L->last++;
return(OK);
}
/*删除操作:删除第i个数据元素*/
int DelList(SeqList *L,int i,ElemType *e)
{
/*判断删除位置是否合法*/
if((i<1)||(i>L->last+1))
{
printf("删除位置不合法");
return(ERROR);
}
*e=L->elem[i-1];
int k;
for(k=i;k<L->last;k++)
{
L->elem[k-1]=L->elem[k];
}
L->last--;
return(OK);
}
int main(void)
{
SeqList L={{5,5,3,2,1,6}};
L.last=5;
ElemType e;
int i;
printf("查找操作:查找第3个数据元素,结果为:%d\n",GetData(L,3));
printf("查找操作:查找数据元素为4的元素,结果为:%d\n",Locate(L,4));
printf("查找操作:查找数据元素为7的元素,结果为:%d\n",Locate(L,7));
printf("\n插入操作:在第3个位置前插入元素8,插入后的顺序表为:");
InsList(&L,3,8);
for(i=0;i<L.last;i++)
printf("%d ",L.elem[i]);
printf("\n删除操作:删除第5个元素,删除后的顺序表为;");
DelList(&L,5,&e);
for(i=0;i<L.last;i++)
printf("%d ",L.elem[i]);
}
#include <stdio.h>
#define MAXSIZE 10 //线性表的最大长度
#define OK 1
#define ERROR 0
typedef int ElemType;//顺序表中存放整形元素
typedef struct
{
ElemType elem[MAXSIZE];
int last;
}SeqList;
/*查找操作(按内容查找)*/
int Locate(SeqList L,ElemType e)
{
int i=0;//i为计数器
while((i<=L.last)&&L.elem[i]!=e)
i++;
if(i<L.last)
return(i+1);//若找到,返回其序号
else
return(-1);//若没找到,返回-1
}
/*查找操作(按序号查找)*/
int GetData(SeqList L,int num)
{
if(num<=L.last)
return(L.elem[num-1]);
}
/*插入操作:在第i个数据元素之前插入一个元素e*/
int InsList(SeqList *L,int i,ElemType e)
{
/*判断插入位置是否合法*/
if((i<1)||(i>L->last))
{
printf("插入位置不合法");
return(ERROR);
}
/*判断表是否已满*/
if(L->last>=MAXSIZE-1)
{
printf("表已满,无法插入");
return(ERROR);
}
int k;
for(k=L->last;k>=i-1;k--)
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;
L->last++;
return(OK);
}
/*删除操作:删除第i个数据元素*/
int DelList(SeqList *L,int i,ElemType *e)
{
/*判断删除位置是否合法*/
if((i<1)||(i>L->last))
{
printf("删除位置不合法");
return(ERROR);
}
*e=L->elem[i-1];
int k;
for(k=i;k<L->last;k++)
{
L->elem[k-1]=L->elem[k];
}
L->last--;
return(OK);
}
int main(void)
{
SeqList L={{5,6,3,2,1,6}};
L.last=6;
ElemType e;
int i;
//在屏幕上打印原表
printf("原表为:");
for(i=0;i<L.last;i++)
{
printf("%d ",L.elem[i]);
}
putchar('\n');
//测试删除操作
printf("查找操作:查找第3个数据元素,结果为:%d\n",GetData(L,3));
printf("查找操作:查找数据元素为4的元素,结果为:%d\n",Locate(L,4));
printf("查找操作:查找数据元素为7的元素,结果为:%d\n",Locate(L,7));
printf("查找操作:查找数据元素为2的元素,结果为:%d\n",Locate(L,2));
//测试插入操作
printf("\n插入操作:在第3个位置前插入元素8,插入后的顺序表为:");
InsList(&L,3,8);
for(i=0;i<L.last;i++)
printf("%d ",L.elem[i]);
printf("\n插入操作:在第8个位置前插入元素8,插入后的顺序表为:");
InsList(&L,8,8);
//测试删除操作
printf("\n删除操作:删除第5个元素,删除后的顺序表为:");
DelList(&L,5,&e);
for(i=0;i<L.last;i++)
printf("%d ",L.elem[i]);
printf("\n删除操作:删除第0个元素,删除后的顺序表为:");
DelList(&L,0,&e);
printf("\n删除操作:删除第13个元素,删除后的顺序表为:");
DelList(&L,13,&e);
//自主操作测试
int input,index;
char ch;
putchar('\n');
puts("现在的表为:");
for(i=0;i<L.last;i++)
printf("%d ",L.elem[i]);
puts("\n请输入您想要操作的元素序号:");
scanf("%d",&input);
printf("请选择操作:\n");
printf("*****************************************\n");
printf("A)查找 B)插入 C)删除\n");
printf("*****************************************\n");
getchar();
scanf("%c",&ch);
switch(ch)
{
case 'A':printf("查找操作:查找第%d个数据元素,结果为:%d\n",input,Locate(L,input));break;
case 'B':printf("请输入插入的元素值:");scanf("%d",&index);InsList(&L,input,index);break;
case 'C':DelList(&L,input,&e);break;
}
puts("处理后的表为:");
for(i=0;i<L.last;i++)
printf("%d ",L.elem[i]);
return 0;
}