Lista enlazada sencilla lista de estructuras de datos -----

En reciente preparar el equipo que algo está revisando el conocimiento de las estructuras de datos, empezando a aprender de la lista cuando se trata de algún dolor, dolor en unas horas más tarde, por fin ganar algo, vistazo a este registro

Lista de Propiedades ----

①: la conexión entre elementos adyacentes a través de punteros.
②: puntero del sucesor del último elemento a NULL.
③: lista de espacio puede ser distribuido, de la demanda.
④: sin desperdicio de espacio de memoria.

lista enlazada

Generalmente se refiere a la lista de enlace simple, que comprende una pluralidad de nodos, cada nodo tiene un puntero al siguiente elemento de la aguja posterior (siguiente). Un siguiente tabla, el último nodo es NULL, que indica el final de la lista.
simple lista de aplicación:

Definición de una estructura utilizada para generar el nodo:

typedef struct node
{
    int date;
    struct node *next;    
}Node;

tipo de nodo Struct define una estructura, en los procedimientos posteriores se utilizan en lugar de struct nodo Nodo ocurrir (fácil de cambiar y funcionamiento);

Definición de una estructura utilizada para almacenar la lista del primer nodo del nodo y la cola:

typedef struct node
{
    Node *head;
    Node *tail;
}LNode;

Esta estructura se almacena en dos nodos (dirección !!!!) no directamente a él valor! !
Generación de un yuan lista original (lista vacía, no hay ningún punto a cualquier nodo)

LNode *createlist()
{
    LNode *list=(LNode *)malloc(sizeof(*list));
    list->head=NULL;
    list->tail=NULL;
    return list;
}

Generar una nueva lista para ser devueltos a la función de llamada original con los tipos de valor de retorno puntero nota y tipo de función;

Asignado a la lista original:

void crea(LNode *list)
{    
    while(1)
    {
        int i;
        scanf("%d",&i);
        if(i==100)
        {
            break;
        }
        //生成孤立结点
        Node *pnew=(Node *)malloc(sizeof(*pnew));    //注意这里要在while()里面定义和分配空间!!!
        pnew->next=NULL;                            //因为每添加一个新结点就需要多增加一块存储空间!!!
        pnew->date=i;                                //这里错  1  次!!
//判断链表是否为空链表,是空链表就让链表的头和尾都指向孤立结点
        if(list->head==NULL)//注意不能直接用head!!!    //这里错  1  次!!
        {
            list->head=pnew;    
            list->tail=pnew;
        }
        else            //不是孤立结点就插入结点生成链表
        {
            list->tail->next=pnew;    //尾插法;1.让原链表的next指向新结点,
                                    //使新结点成为原链表尾结点的下一个结点;
            list->tail=pnew;        //2.让原链表的尾结点指向新结点,更新尾结点的位置;
        
        //    pnew->next=list->head;    //头插法:1.让新结点的next指向原链表的头结点;
        //    list->head=pnew;        //2.让原链表的头结点指向新结点,更新头结点的位置;
        }
    }
}

Imprimir listas:

void print(LNode *list)
{
    if(list->head==NULL)    //若链表为空,直接退出
    {
        return ;
    }
    Node *p=list->head;        //注意这里p指向的是链表的头结点,p的类型是结点型的!!不是链表型的。
    while(p)                
    {
        printf("%d  ",p->date);        
        p=p->next;            //对结点进行操作!!
    }
    printf("\n");
}

2.打印并销毁链表
void print(LNode *list)
{
    if(list->head==NULL)    //若链表为空,直接退出
    {
        return ;
    }
    Node *p=list->head;        //用来指向要打印的结点
    Node *pre=NULL;            //用来指向打印完的结点
    while(p)                
    {
        printf("%d  ",p->date);
        pre=p;                //指向打印完的结点
        p=p->next;
        free(pre);            //销毁打印完的结点(释放其所占空间),即逐渐销毁链表所有的结点。
    }
    printf("\n");
    free(list);                //把空链表也销毁
}

Si tiene alguna pregunta, por favor señalar
que progresamos juntos

Publicado 12 artículos originales · ganado elogios 17 · vistas 2977

Supongo que te gusta

Origin blog.csdn.net/qq1140037586/article/details/105356614
Recomendado
Clasificación