Creado por C y supresiones a la tabla de secuencias y combinado.

Creado por C y supresiones a la tabla de secuencias y combinado.

Un reciente estudio de las estructuras de datos, algunos algoritmos hacen un poco del segundo capítulo, como un registro blanco ella.

#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define OVERFLOW -2
#define OK 1
#define ERROR 0

typedef int Status;
typedef int ElemType;

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

Status InitList_Sq(SqList *L){
    L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
    if (!L->elem) exit(OVERFLOW);
    L->length = 0;
    L->listsize = LIST_INIT_SIZE;
    return OK;
} //创建一个空的线性表L。

ElemType GetListElem(SqList const *L, int const i){
    ElemType *e;
    if (i < 1 || i > L->length)
        return ERROR;
    else
        e = L->elem +i -1;
    return *e;
}

Status ListInsert_Sq(SqList *L, int const i, ElemType const e){
    if (i < 1 || i > L->length + 1) return ERROR;
    if(L->length >= L->listsize){
        int *newbase;
        newbase = (ElemType*)realloc(L->elem,
                (L->listsize + LISTINCREMENT) * sizeof(ElemType));
        if (!newbase)exit(OVERFLOW);
        L->elem = newbase;
        L->listsize += LISTINCREMENT;
    }
    ElemType *q = &(L->elem[i-1]);   //q为插入的位置
    for (int *p = &(L->elem[L->length-1]);p >=q; --p)
        *(p + 1) = *p;       //将元素后移一位
    *q = e;
    ++L->length;
    return OK;
}

Status ListDelete_Sq(SqList* L, int i){
    if (i < 1 || i > L->length)
        return (ERROR);
    ElemType *p = &(L->elem[i-1]);    //p为删除元素的位置
    ElemType *q ;
    q = L->elem + L->length -1;
    for(++p; p <= q; ++p)
        *(p-1) = *p;
    --L->length;
    return OK;
}

Status MergeList(SqList *La, SqList *Lb, SqList *Lc){
    InitList_Sq(Lc);
    ElemType i= 1;ElemType j =1; ElemType k = 0;
    ElemType La_len = La->length;
    ElemType Lb_len = Lb->length;
    while ((i <= La_len) && (j <= Lb_len)){
        ElemType ai; ElemType bj;
        ai = GetListElem(La, i);
        bj = GetListElem(Lb, j);
        if(ai <= bj){
            ListInsert_Sq(Lc, ++k, ai);
            ++i;}
        else{
            ListInsert_Sq(Lc, ++k, bj);
            ++j;
        }
    }
    while (i <= La_len){
        ElemType ai;
        ai = GetListElem(La, i++);
        ListInsert_Sq(Lc, ++k, ai);
    }
    while (j <= Lb_len){
        ElemType bj;
        bj = GetListElem(Lb, j++);
        ListInsert_Sq(Lc, ++k, bj);

    }
    return OK;
}

Status PrintList(SqList *L){
    for (int i = 0;i < L->length ;i++) {
        printf("%d ",L->elem[i]);
    }
    return OK;
}

int main() {
    SqList la;
    SqList lb;
    SqList lc;
    InitList_Sq(&la);
    InitList_Sq(&lb);
    InitList_Sq(&lc);
    ListInsert_Sq(&la,1,1);ListInsert_Sq(&la,2,3);ListInsert_Sq(&la,3,5);ListInsert_Sq(&la,4,7);
    ListInsert_Sq(&lb,1,2);ListInsert_Sq(&lb,2,4);ListInsert_Sq(&lb,3,6);ListInsert_Sq(&lb,4,8);ListInsert_Sq(&lb,5,10);
    //ListDelete_Sq(&la, 1);
    int a = GetListElem(&la, 1);
    MergeList(&la,&lb,&lc);
    PrintList(&lc);
    return 0;
}

Hay algunas preguntas haciendo tiempo:
1. De hecho, el libro no es acerca de la interpretación del estado, Elem declaró que
typedef int Status
la búsqueda en Internet, la frase es un tipo personalizado de la declaración. typedef se utiliza para definir el tipo de alias.
i estado, el equivalente int i;
En cuanto a qué estado de la llamada, las posibles razones para el estado de Inglés significa ese estado, los programadores quieren representar un estado con un valor int, por lo que un tipo personalizado. Por lo tanto Estado i; veo que la variable i indica una variable de estado. El int i; no se puede transmitir al lector como un significado. Pero la esencia es la misma, por lo que la escritura es para transmitir información acerca de la programación, para facilitar el mantenimiento futuro y leer el programa.

2. Yo uso el libro de Tsinghua University Press es una estructura de datos (versión C), la mayor parte del libro de códigos es pseudo-código, es necesario definir sus propias funciones, y para el libro, como
void MergeList(List ls, List Lb, List &Lc)
interpretación de esta definición, se añade el profesor "y" matriz se cambió antes y después de la ocurrencia del parámetro, pero esto sólo parece fácil de entender en la lectura del libro, todavía tomo la forma de añadir puntero en el código real, pedir al profesor siguiente clase.
3 no entienden por qué inicialmente la definición de puntero para añadir el elem porque L.elem L se refiere a la dirección base, y el papel de la variable puntero para indicar la dirección.

Publicado cinco artículos originales · ganado elogios 0 · Vistas 516

Supongo que te gusta

Origin blog.csdn.net/pursuingparadise/article/details/101621841
Recomendado
Clasificación