顺序表的建立和删除
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define ElemType int
#define MAXSIZE 100 /*此处的宏定义常量表示线性表可能达到的最大长度*/
typedef struct
{
ElemType elem[MAXSIZE]; /*线性表占用的数组空间*/
int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/
}SeqList;
void initial(SeqList *v) //初始化线性表
{//初始化线性表
int i;
printf("请输入初始线性表长度:n="); //输入线性表初始化时的长度
scanf("%d",&v->last);
printf("请输入从1到%d的各元素\n",v->last);
getchar();
for(i=0;i<v->last;i++) scanf("%d",&v->elem[i]); //输入线性表的各元素
v->last--;
}
int InsList(SeqList *L,int i,ElemType e) //在线性表中插入元素
{
int k;
if(i<1||(i>L->last+2))
{
printf("插入位置i值不合法");
return(ERROR);
}
if(L->last>=MAXSIZE-1)
{
printf("表已满,无法插入");
return(ERROR);
}
for(k=L->last;k>=i-1;k--)
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;
L->last++;
return(OK);
//实验完成该部分的内容
}
int DelList(SeqList *L,int i,ElemType *e)
/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值为1≤i≤L.last+1 */
{
int k;
if(i<1||(i>L->last+2))
{
printf("删除位置不合法!");
return(ERROR);
}
*e=L->elem[i-1];
for(k=i;k<=L->last;k++)
L->elem[k-1]=L->elem[k];
L->last--;
return(OK);
//实验完成该部分的内容
}
int Locate(SeqList L, ElemType e)
{
int i;
i=0;
while((i<=L.last)&&(L.elem[i]!=e))
i++;
if(i<=L.last)
return(i+1);
else
return(-1);
//实验完成该部分的内容
}
void print(SeqList S)
{
int i;
for(i=0;i<=S.last;i++)
printf("%5d",S.elem[i]);
printf("\n");
}
void main()
{SeqList S; //S为一线性表
int loc,flag=1;
char j;
int ch;
int temp;
printf("本程序用来实现顺序结构的线性表。\n");
printf("可以实现查找、插入、删除等操作。\n");
initial(&S); //初始化线性表
while(flag)
{ printf("请选择:\n");
printf("1.显示所有元素\n");
printf("2.插入一个元素\n");
printf("3.删除一个元素\n");
printf("4.查找一个元素\n");
printf("5.退出程序 \n");
scanf(" %c",&j);
switch(j)
{case ’1’:print(S); break; //显示所有元素
case ’2’:{printf("请输入要插入的元素和插入位置:\n");
printf("格式:数据,位置;例如:a,2\n");
scanf(" %d,%d",&ch,&loc); //输入要插入的元素和插入的位置
temp=InsList(&S,loc,ch); //插入
if(temp==ERROR) printf("插入失败!\n"); //插入失败
else {printf("插入成功!\n"); print(S);} //插入成功
break;
}
case ’3’:{printf("请输入要删除元素的位置:");
scanf("%d",&loc); //输入要删除的元素的位置
temp=DelList(&S,loc,&ch); //删除
if(temp==OK) printf("删除了一个元素:%d\n",ch); //删除成功
else printf("该元素不存在!\n"); //删除失败
print(S);
break;
}
case ’4’:{printf("请输入要查找的元素:");
scanf(" %d",&ch); //输入要查找的元素
loc=Locate(S,ch); //定位
if(loc!=-1) printf("该元素所在位置:%d\n",loc); //显示该元素位置
else printf("%c 不存在!\n",ch);//当前元素不存在
break;
}
default:flag=0;printf("程序结束,按任意键退出!\n");
}
}
getchar();
}