⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 list.c

📁 本源程序用c实现了一个顺序表,结构清晰,条理通顺.
💻 C
字号:
//*************************************************************
//顺序表的C实现(数据结构+算法)
//
//CreateDate:09/28
//编译工具VC++6.0
//file name is Tline.c
//*************************************************************
  #include   <stdio.h>   
  #include   <stdlib.h>   
  #include<time.h>   
  typedef   int   ElemType;   
  typedef   struct     seqlist   
  {   
  ElemType   *data_address;   
  int   listsize,listlength;   
  }seqlist;   
  ElemType   Getelem(seqlist   *L,int   pos);   
  void   initlist(seqlist   *L,int   n);   
  void   Freelist(seqlist   *L);   
  int    Emptylist(seqlist   *L);   
  int    Fulllist(seqlist   *L);   
  void   Insertelem(seqlist   *L,int   pos,ElemType   item);   
  void   Insertrear(seqlist   *L,ElemType   item);   
  void   Deletelem(seqlist   *L,int   pos,ElemType   item);   
  void   Updataelem(seqlist   *L,int   pos,ElemType   item);   
  void   Clearlist(seqlist   *L);   
  int    Locate(seqlist   *L,ElemType   item);   
  int    Listlength(seqlist   *L);   
  
  //create all function  
  void   initlist(seqlist   *L,int   n)   
  {   
  L->data_address   =   (ElemType   *)malloc(n*sizeof(ElemType));   
  if(L->data_address==NULL)   
  exit(1);   
  L->listsize   =  n; //表大小为n   
  L->listlength =  0; //空表长度为0,(元素个数)   
  }   
    
  void   Freelist(seqlist   *L)   
  {  free(L->data_address);   }   
    
  int   Emptylist(seqlist   *L)   
  {   
  if(L->listlength==0)   
  return   1;   
  else   
  return   0;   
  }   
    
  int   Fulllist(seqlist   *L)   
  {   
  if(L->listlength==L->listsize)   
  return   1;   
  else   
  return   0;   
  }   
  //在pos位置插入元素item    
  void   Insertelem(seqlist   *L,int   pos,ElemType   item) 
  {   
  int   i;   
  if(Emptylist(L))   
  {   
  printf("表元素已满!");   
  exit(1);   
  }   
  if(pos<1   ||   pos>L->listlength+1)   
  { printf("目标位置不合法!");   
  exit(1);   
  }   
  for(i=L->listlength-1;i>pos;--i)   
  { L->data_address[i+1]   =   L->data_address[i];}   
  L->data_address[pos]   =   item;   
  L->listlength++;   
  }   
    
  void   Insertrear(seqlist   *L,ElemType   item)   
  {   
  if(L->listlength==L->listsize)   
  {   
  printf("表已满!");   
  exit(1);   
  }   
  L->data_address[L->listlength]   =   item;   
  L->listlength++;   
  }   
    
    
  void   Deletelem(seqlist   *L,int   pos)   
  {   
  int   i;   
  if(Fulllist(L))   
  { printf("表为空!");   
  exit(1);   
  }   
    
  if(pos<0   ||   pos<L->listlength-1)   
  { printf("目标位置不合法!");   
  exit(1);   
  }   
  for(i=L->data_address[pos-1];i<L->listlength-1;++i)   
  {   
  L->data_address[i]   =   L->data_address[i+1];   
  }   
  L->listlength--;   
  }
  
  //获取pos位置的元素的值   
  ElemType   Getelem(seqlist   *L,int   pos)   
  {   
  if(pos<0   ||   pos   >   L->listlength-1)   
  { printf("pos位置不合法!");   
  exit(1);   
  }   
  return   (L->data_address[pos]);   
  }   
  //替换pos位置元素的值   
  void   Updataelem(seqlist   *L,int   pos,ElemType   item)   
  {   
  if(pos<0   ||   pos>L->listlength-1)   
  { printf("pos位置不合法!");   
  exit(1);   
  }   
  L->data_address[pos]   =   item;   
  }   
  
  //清空表元素   
  void   Clearlist(seqlist   *L)   
  {     L->listlength   =   0;   }   

  //返回item元素在表中的下标   
  int   Locate(seqlist   *L,ElemType   item)   
  {   
  int   i=0;   
  while(i   <=   L->listlength-1   &&   item   !=   L->data_address[i])   
  i++;   
  if(i<=L->listlength-1)   
  return(i);   
  return(-1); //表中无此元素   
  }  
  
  //求表长,返回表中元素个数   
  int   Listlength(seqlist   *L)   
  {     return(L->listlength);    }   
    

  void   Printlist(seqlist   *L)   
  {   
  int   n,i;   
  n   =   Listlength(L);   
  for(i=0;i<n;++i)   
  {   
  printf("%6d",Getelem(L,i));   
  if((i+1)%10==0)   
  printf("\n");   
  }   
  printf("\n");   
  }  
  
  //主程序体
  void   main(void)   
  {   
  int   i;   
  seqlist   L;   
  initlist(&L,51);   
  srand((unsigned   int)time(0));   
  for(i=0;i<50;++i)   
  Insertrear(&L,rand()%50);//插入50个元素   
    
  printf("表中元素为:\n");   
  Printlist(&L);   
  //Deletelem(&L,49);   
  Printlist(&L);   
  i=Locate(&L,22);   
  if(i!=-1)   
  printf("%d\n",i);   
  else   
  printf("22   dose   not   exist!");   
  printf("%d\n",Getelem(&L,10));   
  system("pause");   
    
  Freelist(&L); 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -