一、【顺序表——插入删除与查找】
#include<stdio.h>
#include<stdlib.h>
#define MAX 20
#define LISTINCREMENT 10
typedef struct
{
int *elem;
int length;
int listsize;
}SqList;
void CreatList(SqList &L)
{
L.elem=(int*)malloc(MAX *sizeof(int));
if(!L.elem)
return;
L.listsize=MAX;
printf("输入表的长度:");
scanf("%d",&L.length);
printf("输入%d个数:",L.length);
for(int i=0;i<L.length;i++)
scanf("%d",&L.elem[i]);
}
void Traverse(SqList L)
{
printf("表中数据为:");
for(int i=0;i<L.length;i++)
printf("%3d",L.elem[i]);
printf("\n");
}
void LocateElem(SqList L,int e)
{
int i;
printf("输入查找的元素:");
scanf("%d",&e);
for(i=0;i<L.length;i++)
{
if(L.elem[i]==e){
printf("查找成功,查找元素为:%d",L.elem[i]);
printf("\n");
return;
}
}
printf("查找失败");
printf("\n");
}
int makesureElem(SqList L,int e)
{
int i;
for(i=0;i<L.length;i++)
{
if(L.elem[i]==e)
{
printf("要删除的元素位置为:%d",i+1);
printf("\n");
return (i+1);
}
}
printf("元素不存在");
printf("\n"); return0;
}
void ListInsert(SqList &L)
{
int i, e;
printf("输入要插入位置及元素:");
scanf("%d%d",&i,&e);
printf("在顺序线性表中第%d个位置之前插入新的元素:%d\n",i,e);
if(i<1||i>L.length+1) return;
int *p,*q;
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;
*q=e;
++L.length;
return;
}
int ListDelete(SqList &L)
{
int i, e;
printf("输入要删除的元素:");
scanf("%d",&e);
i=makesureElem(L,e);
if((i<1)||(i>L.length)) return 0;
Else
{
int *p,*q;
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;
for(++p;p<=q;++p)*(p-1)=*p;
--L.length;
printf("元素被删除");
}
return 0;
}
int main()
{
SqList L;
CreatList(L);
Traverse(L);
LocateElem(L,1);
ListInsert(L);
Traverse(L);
ListDelete(L);
Traverse(L);
return 0;
}