#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 20
typedef struct LNode *List;
struct LNode{
int Data[MAXSIZE];
int Last;
};
struct LNode L;
List PtrL;
List MakeEmpty()
{
List PtrL;
PtrL=(List)malloc(sizeof(struct LNode));
PtrL->Last=-1;
return PtrL;
}
/*查找成功的平均比较次数为(n+1)/2,平均时间性能为O(n)*/
int Find(int X,List PtrL)
{
int i=0;
while(i<=PtrL->Last&&PtrL->Data[i]!=X)
i++;
if(i>PtrL->Last)
return -1;
else return i;
}
/*平均移动次数为n/2,平均时间性能为O(n)*/
void Insert(int X,int i,List PtrL)
{
int j;
if(PtrL->Last==MAXSIZE-1){
printf("表已满,不能插入");
return;
}
if(i<1||i>PtrL->Last+2) {
printf("位置不合法");
return;
}
for(j=PtrL->Last;j>=i-1;j--)
PtrL->Data[j+1]=PtrL->Data[j];
PtrL->Data[i-1]=X;
PtrL->Last++;
return;
}
/*平均移动次数(n-1).2,平均时间性能为O(n)*/
void Delete(int i,List PtrL){
int j;
if(i<1||i>PtrL->Last+1){
printf("不存在第%d个元素",i);
return;
}
for(j=i;j<=PtrL->Last;j++){
PtrL->Data[j-1]=PtrL->Data[j];
}
PtrL->Last--;
return;
}
/*输出整个顺序表*/
void ListTraverse(List PtrL)
{
int i;
for(i=0;i<PtrL->Last+1;i++)
{
printf("%5d",PtrL->Data[i]);
}
return;
}
/*
int Find(int X,List PtrL){
int i;
for(i=0;i<=PtrL->Last;i++){
if(PtrL->Data[i]=X)
return i+1;
}
return 0;
}
*/
int main()
{
List L1;
int i;
L1=MakeEmpty();
for(i=1;i<=10;i++){
Insert(i+2,i,L1);
}
ListTraverse(L1);
printf("\n");
Insert(100,2,L1);
ListTraverse(L1);
printf("\n");
Delete(3,L1);
ListTraverse(L1);
printf("\n");
int k;
k=Find(100,L1);
printf("%5d",k);
return 0;
}
顺序表
最新推荐文章于 2022-10-16 00:27:19 发布