c语言创建单链表两种方法的区别与联系

单链表:

NO.1 头插法

每次从表头插入新节点,具体过程:先开辟表头指针,然后陆续为每个数据元素开辟存储空间并赋值,让该节点作为首元节点,原来的首元节点作为他的后继节点。


接下来看看代码 

第一是尾插法:

void createlist (node *h)//尾插法创建单链表

{

    int num;

  while(scanf("%d",&num),num!=0)

  {

  node *p =(node*)malloc(sizeof(node));

      p->data=num;

      h->next=p;

      h=p;

  }

h->next=NULL;

}

惊奇的发现 输出的时候是正序输出的

再来看看首插法:

void createlist (node *h)//首插法创建单链表

{

    int num;

  while(scanf("%d",&num),num!=0)

  {

  node *p =(node*)malloc(sizeof(node));

      p->data=num;

      p->next=h->next;

      h->next=p;

  }

}

这是效果:

这个是逆序输出;当然这些都可以调节的。

对于单链表的删除与插入就更简单啦 看看代码:

插入:

void insertlist(node *h)

{

  printf("\n请输入需要插入在几个以及插入的数字\n");

  int i,num,j=0;

  scanf("%d %d",&i,&num);

  node *pre=h;

  while(j

  {

      pre=pre->next;

      j++;

  }

  node *p=(node*)malloc(sizeof(node));

  p->data=num;

  p->next=pre->next;

  pre->next=p;

}

删除:

void bocklist(node*h)

{

    printf("请输入需要删除的数字\n");

  node *p,*pre=h;

  int i,j=0;

  scanf("%d",&i);

  while(j

  {

      pre=pre->next;

      j++;

  }

  p=pre->next;

  pre->next=p->next;

  free(p);

你可能感兴趣的:(c语言创建单链表两种方法的区别与联系)