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;
}