顺序表的基本操作

来源:互联网 发布:银行卡四件套淘宝网 编辑:程序博客网 时间:2024/05/16 15:37

#include <stdio.h>

 

 

typedef struct {

int* address;

int  listLength;

int  listSize; 

}L; 

/*

 

  L arrBuild()

{    

int* p1=NULL;

int i=0,end=0,temp=0;

    L   list1={NULL,0,0};


printf("请输入要创建的顺序表的初始元素容量listSize= ");

scanf("%d",&(list1.listSize));

printf("\n");

    getchar();

   

    p1=(int*) malloc (list1.listSize*sizeof(int));

    if(p1==NULL) exit(-1);

list1.address=p1; 

i=0;

printf("请输入一个整型(int)作为结尾标志end=:");

scanf("%d",&end);

printf("\n");

getchar();

 

printf("请输入一组数据(整型int):"); 

 

scanf("%d",&temp);//先缓存到temp中

while( temp!=end)  

{

*(p1+i)=temp;

list1.listLength++;

i++;

if( !((list1.listSize-list1.listLength)>=2) )

 

  {

  p1=(int*)realloc(p1,(list1.listSize+1)*sizeof(int));

  if(p1==NULL) exit(-1);

  list1.address=p1;

   list1.listSize++; 

  }

  

scanf("%d",&temp);

}

fflush(stdin);//getchar();

return list1;

 

 

void arrInsert(int* p1,int value,int index,int len)

 {

   

   

int j=len-1;//不是int j=len-2; 

while(index<=len-1&&j>=index)

 {

   *(p1+j+1)=*(p1+j);

   j--;

 } *(p1+index)=value; 

     

 }

 

  

   void arrDelect(int* p1,int index,int len)

{     

     //int len=sizeof(p1)/sizeof(int);//2  这样算数组长度是不正确的 sizeof(p1)!=sizeof(arr1)

     //printf("数组arr1的长度len=%d\n",len);//测试len 

     

int i=index;

while(i<=len-1)

{

 *(p1+i)=*(p1+i+1);

 i++;

 

 

 void arrSortmaoPao(int*p,int len)

{

int i,j;

for(i=1;i<=len-1;i++)//第i轮 

  { 

  for(j=0;j<=len-i-1;j++)

    {  int temp;

     if( *(p+j)>*(p+j+1) )//小-->大 

     {

        temp=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=temp;

 }

 }

}

 

 

 int arrSearcherFeng(int* p,int finder,int len)

{   int low=0;

    int high=len-1;

    int mid=(low+high)/2;

while(low<=high) 

  {

mid=(low+high)/2;

if(*(p+mid)>finder)

{

   high=mid-1;

}

else if(*(p+mid)<finder)

{

low=mid+1;

}

else 

{

printf("找到了!在升序数组中%d的位置是%d\n",finder,mid);

break;

}

  }


    if(finder!=*(p+mid))

    {

printf("404NOTFOUND\n"); 

    } 

    return mid;

}

 

 

int main()

{     int i;

      char mark='y';


     printf("\n");

L list1=arrBuild();

     printf("\n");

     printf("创建的顺序表:") ;

    for(i=0;i<list1.listLength;i++)

     {

    printf("%5d",*(list1.address+i)) ;

//printf("listSize=%d",list1.listSize);

printf("\n\n");

int index,value ;

mark='y';

while(mark=='y'||mark=='Y')

{

M:printf("请输入所增加元素的插入位置 index=");

scanf("%d",&index); 

printf("\n");

fflush(stdin); //getchar();

if(index>list1.listLength||index<0)

{

printf("位 置 i 输 入 无 效 !\n");

goto M;

}

printf("请输入所增加的元素的值 value=");

scanf("%d",&value);

printf("\n");

getchar();

arrInsert(list1.address,value,index,list1.listLength);

list1.listLength++;//每插入一个元素后 实际长度+1 

printf("在%d处插入%d后新表为:  ",index,value); 

for(i=0;i<list1.listLength;i++)  


{

printf("%5d",*(list1.address+i));

}

printf("\n\n"); 

B1:printf("是否继续进行该操作(y/n不区分大小写):");

scanf("%c",&mark); 

  getchar();

printf("\n"); 

   if(mark=='n'||mark=='N') break;

   if(mark!='y'&&mark!='Y'&&mark!='n'&&mark!='N')

{

printf("输入无效!\n");

goto B1;

}

  }

  printf("\n");

mark='y';

while(mark=='y'||mark=='Y')

{

D:  printf("请输入要删除的元素的下标位置index= ");

scanf("%d",&index) ;

getchar();

if(index>list1.listLength-1||index<0)

     {

     printf("位置输入有误!\n\n");

     goto D;

}

printf("\n");

 

arrDelect(list1.address,index,list1.listLength);

list1.listLength--;//*

printf("删除位置%d上的元素后新表为:  ",index); 

for(i=0;i<list1.listLength-1;i++)

for(i=0;i<list1.listLength;i++)

{

printf("%5d",*(list1.address+i));

}

 printf("\n\n");

 

 B2: printf("是否继续进行该操作(y/n不区分大小写):");

scanf("%c",&mark); 

   getchar(); 

   printf("\n");

   if(mark=='n'||mark=='N') break;

if(mark!='y'&&mark!='Y'&&mark!='n'&&mark!='N')

{

printf("输入无效!\n");

goto B2;

}

}

printf("\n");

mark='y';

while(mark=='y'||mark=='Y')

{

int finder;

printf("亲输入要查找的元素发finder= ");

scanf("%d",&finder); 

getchar();

printf("\n");

 

arrSortmaoPao(list1.address,list1.listLength);

arrSearcherFeng(list1.address,finder,list1.listLength) ;

  printf("    (注:升序排序后的数组为:)"); 

for(i=0;i<list1.listLength;i++)

{

printf("%5d",*(list1.address+i));

}

printf("\n\n");

B3: printf("是否继续进行该操作(y/n不区分大小写):");

scanf("%c",&mark); 

   getchar();

printf("\n"); 

   if(mark=='n'||mark=='N') break;

   if(mark!='y'&&mark!='Y'&&mark!='n'&&mark!='N')

{

printf("输入无效!\n");

goto B3;

}

}

printf("\n");

getchar();

return 0;

}

原创粉丝点击