您的位置:

链表c语言头插法,c语言链表尾插

本文目录一览:

c语言数据结构,单链表中的头插法求解释

L这个头结点是不存储数据的,L-next L的下个结点才存储数据,为实际的第一个结点

s-next=L-next 新插入的结点s放在第一个结点前面,变为新的第一个结点,L-next=s 这句让L-next指向新的第一个结点

L-next改为L s-next=L ,L=s可以,这样头指针就是实际存储数据的第一个结点

C语言 头插法建立链表

#include

stdio.h

#include

stdlib.h

typedef

struct

_list

{

int

val;

struct

_list*

next;

}

*node,

list;

//

在pos位置之后插一个节点,pos为空则在头部插入

node

insert(

node*

head,

node

pos,

int

val

)

{

node

tmp;

tmp

=

(

node

)malloc(

sizeof(

list

)

);

tmp-val

=

val;

tmp-next

=

pos

?

pos-next

:

*head;

return

(

pos

?

pos-next

:

*head

)

=

tmp;

}

//

从数组简单构造一个链表

node

create(

int*

beg,

int*

end

)

{

node

head

=

null;

while

(

beg

!=

end

)

{

insert(

head,

null,

*beg++

);

//

在头部插入

}

return

head;

}

//

遍历输出各个节点的值

void

print(

node

head

)

{

while

(

head

)

{

printf(

"%d

",

head-val

);

head

=

head-next;

}

putchar(

'\n'

);

}

int

main()

{

int

a[]

=

{

0,1,2,3,4,5,6,7,8,9

};

node

head;

head

=

create(

a,

a

+

10

);

print(

head

);

return

0;

}

单链表(C语言)头插法的建立和输出问题

//程序有多处改动,烦请将该程序另存,对比修改前后的差别

/*

1、头部无数据,则在链表中,浪费头结点;

2、头部有数据,则在链表中,浪费最后一个结点;

3、头部无数据结点思想:将新结点挂在头结点后面,将新数据存放在新结点中;

4、头部有数据结点思想:将新结点挂在头结点后面,将新数据存放在头结点中;

*/

#include stdio.h

#include stdlib.h

#define N 5

struct Node {

    int Data; /* 存储结点数据 */

    struct Node * Next; /* 指向下一个结点的指针 */

};

typedef struct Node List; /* 定义单链表类型 */

void headinsert(List * L);

void display( List * L );

void headinsert2(List * L);

void display2( List * L );

int main()

{

    List *L1,*L2;

    L1=(List *)malloc(sizeof(struct Node));

L2=(List *)malloc(sizeof(struct Node));

printf("头部含数据:");

headinsert(L1);

    display(L1);

printf("\n");

printf("头部含数据:");

    headinsert2(L2);

    display2(L2);

printf("\n");

return 0;

}

void headinsert(List *L)//头部无数据

{

int  i;

     List  * p;

   // scanf("%d", N);

    L-Next=NULL;

    for ( i=0; iN; i++ ) 

{

        p = (List *)malloc(sizeof(struct Node));

        p-Data=i+1; 

p-Next = NULL;

        L-Next = p;  //此处有改动,否则,后面一个结点插入到前一个结点的前面了

L = L-Next ;

    }

}

void display( List *L )

{

   List *p;

   p=L-Next; 

  while(p!=NULL)

  { 

    printf("%d ",p-Data);

p=p-Next;

  }

}

void headinsert2(List *L)//头部有数据

{

int  i;

     List  * p;

    //scanf("%d", N);

    L-Next = NULL;

    for ( i=0; iN; i++ ) 

{

        p = (List *)malloc(sizeof(struct Node));

        L-Next = p;

L-Data=i+2; //+2以示区别  

        L = L-Next; 

p -Next = NULL;

    }

}

void display2( List *L )

{

   List *p;

   p=L; 

  while(p-Next!=NULL)//此处改为p-Next!=NULL,否则会有一个垃圾数

  { 

    printf("%d ",p-Data);

p=p-Next;

  }

}