Estructura de datos - Tabla de orden lineal

Estructura de datos - Tabla de orden lineal

Análisis de requerimientos

Este procedimiento es una tabla de secuencia de programa de demostración, el objeto básico es estar familiarizado con las diversas operaciones aritméticas, varios conceptos básicos de la tabla para tabla de secuencia de operación y mostrar el resultado de la operación básica.

Tipos de datos

typedef int Status;
typedef int ElemType;

typedef struct {
 ElemType *elem;
 int length;
 int listsize;
}SqList;

Realizar la función

tabla de secuencia de inicialización

Status Init_SqList(SqList *L){//初始化 
 L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(!L->elem){
     printf("空间分配不成功\n");
     printf("-----------------------------\n");
     return ERROR;
 }else{
  printf("线性表初始化成功\n"); 
  printf("-----------------------------\n");
 } 
 L->length=0;
 L->listsize=LIST_INIT_SIZE;
 return OK;
}

tabla de secuencia de entrada

Status Input_SqList(SqList *L){//输入 
 ElemType e;
 int i=0;
 printf("请输入初始顺序表(输入-32768时结束):"); 
 while(1){
  scanf("%d",&e);
  if(e==-32768) break;
  L->elem[i++]=e; 
 }
 L->length=i;
 return OK;
} 

Encuentra orden elemental y el retorno

int Locate_SqList(SqList L,ElemType e){//查找元素位序并返回 
  int j=1;
 while(j<=L.length&&L.elem[j-1]!=e)
  j++;
 if(L.elem[j-1]==e)
  return j;
 else
  return 0;
} 

Insertado en la secuencia de bits

Status Insert_Locate_SqList(SqList *L,int i,ElemType e){//按位序插入 
 if(i<1||i>L->length+1){
  printf("插入位序出错,插入不成功\n");
  printf("-----------------------------\n");
  return ERROR;
 } 
 if(L->length>=L->listsize){
  ElemType *newbase;
  newbase=(ElemType *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
  if(!newbase){
   printf("空间分配不成功\n");
   printf("-----------------------------\n");
         return ERROR;
  }else printf("重新分配空间成功\n");
  L->elem=newbase;
  L->listsize+=LISTINCREMENT;
 }
 ElemType *p=&(L->elem[i-1]);
 ElemType *q;
 for(q=&(L->elem[L->length-1]);q>=p;q--){
  *(q+1)=*q;
 }
 *p=e;
 L->length++;
 printf("插入成功\n"); 
 printf("-----------------------------\n");
 return OK;
}

Antes de la inserción e2 e1

Status Insert_Date_SqList(SqList *L,ElemType e1,ElemType e2){//e1之前插入e2 
 if(L->length>=L->listsize){
  ElemType *newbase;
  newbase=(ElemType *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
  if(!newbase){
   printf("空间分配不成功\n");
   printf("-----------------------------\n");
         return ERROR;
  }else printf("重新分配空间成功\n");
  L->elem=newbase;
  L->listsize+=LISTINCREMENT;
 }
 int i=-1,j=0;
 for(;j<L->length;j++){
  if(L->elem[j]==e1){
   i=j;
   break;
  }
 }
 if(i==-1){
  printf("未找到数据,插入表尾\n");
  L->elem[L->length]=e2;
 } 
 else{
  for(j=L->length-1;j>=i;j--)
   L->elem[j+1]=L->elem[j];
  L->elem[i]=e2;
 }    
 L->length++;
 printf("插入成功\n");
 printf("-----------------------------\n");
 return OK;
}

secuencia de bits Delete

Status Delete_Locate_SqList(SqList *L,int i){//按位序删除 
 if(L->length==0){
  printf("线性表为空\n");
  printf("-----------------------------\n");
  return ERROR; 
 }
 if(i<1||i>L->length){
  printf("删除位序错误\n");
  printf("-----------------------------\n");
  return ERROR; 
 }
 int j;
 for(j=i-1;j<L->length-1;j++)
  L->elem[j]=L->elem[j+1];
 L->length--;
 return OK;
} 

Encuentra la eliminación de datos

Status Delete_Date_SqList(SqList *L,ElemType e){//查找数据删除
 int i=-1,j=0;
 for(;j<L->length;j++){
  if(L->elem[j]==e){
   i=j;
   break;
  }
 }
 if(i==-1){
  printf("未找到数据\n");
  return ERROR;
 } 
 else{
  for(;i<L->length-1;i++)
   L->elem[i]=L->elem[i+1];
  L->length--;
  
 }
 return OK;
}

Eliminar todos los elementos duplicados

Existente llamadas a funciones

Status Delete_AllDate_SqList(SqList *L,ElemType e){//删除所有重复元素 
 int count=0,i=0,j=0;
 while(i<L->length){
  if(L->elem[i]==e){
   Delete_Locate_SqList(L,i+1);
   count++;
   i--; 
  }
  i++;
 }
 if(count==0) printf("未找到元素\n");
 else{
  printf("删除成功\n");
  printf("-----------------------------\n");
 }
 return OK;
}

Eliminar

Al hacer referencia a los datos que desea borrar de eliminación

Status Delete_AllDate_SqList(SqList *L,ElemType e){//删除所有重复元素 
 int count=0,i=0,j=0;
 for(i=0;i<L->length;i++){
  if(L->elem[i]==e){
   count++;
  }else{
   L->elem[i-count]=L->elem[i];
  }
 } 
 if(count==0) printf("未找到元素\n");
 else{
  L->length-=count;
  printf("删除成功\n");
  printf("-----------------------------\n");
 }
 return OK;
}

Mostrar forma lineal

Status Display_SqList(SqList L){//显示线性表
    if(L.length==0) printf("线性表为空\n");
    ElemType *p=&(L.elem[0]),*q=&(L.elem[L.length-1]);
 for(;p<=q;p++) printf("%d\t",*p);
 printf("\n");
 printf("-----------------------------\n");
 return OK;
}
Publicado 22 artículos originales · ganado elogios 1 · vistas 1058

Supongo que te gusta

Origin blog.csdn.net/Doro_/article/details/103996992
Recomendado
Clasificación