单链表创建:头插法与尾插法

1、采用头插入法创建单链表的思路:首先创建一个空表,生成一个新的节点;并将读取到的数据放入新节点的数据域中,然后将该节点插入到当前链表的表头,即就是头结点之后;直到插入元素完成。

2、效果:采用头插入法创建的单链表的逻辑顺序与输入的数据顺序是相反的,所以头插入法是一个逆序建表法。

原理图:
单链表创建:头插法与尾插法_第1张图片

#include
#include 
typedef int ElemType;
typedef struct linknode
  {
    ElemType data;
    struct linknode *next;
  }LNode, *LinkList;

LinkList Create(void)
  {
    LinkList head;
    ElemType d;
    LNode *s;
    head=(LinkList)malloc (sizeof(LNode)); //head节点
    head->next=NULL;   //初始化为空链表
     //head->data=0;
    puts ("请输入链表元素......");
    d=getchar();
    while (d!='\n')  
      {
        s=(LinkList)malloc (sizeof(LNode)); //为新节点分配内存空间
        s->data=d; 
        s->next=head->next;
        head->next=s;
        d=getchar();
      }
    return head;
  }

int main()
  {
  LinkList L1;
  L1=Create ();
  printf ("链表是:\n");
  while (L1)
    {
      printf ("%2c",L1->data);
      L1=L1->next;
    }
  system ("pause");
  return 0;
  }

2.尾插法
效果:采用尾插入法创建的单链表的逻辑顺序与输入的数据顺序是相同的;

原理图:
单链表创建:头插法与尾插法_第2张图片

#include
#include 
typedef int ElemType;
typedef struct linknode
  {
    ElemType data;
    struct linknode *next;
  }LNode, *LinkList;

LinkList Create(void)
  {
    LinkList head,current;
    ElemType d;
    LNode *s;
    current=head=(LinkList)malloc (sizeof(LNode)); //head节点
    //current->data=0;
    puts ("请输入链表元素......");
    d=getchar();
    while (d!='\n')
      {
        s=(LinkList)malloc (sizeof(LNode)); //为新节点分配内存空间
        s->data=d; 
        current->next=s;
        current=s;
        d=getchar();
      }
    current->next=NULL;  //最后尾指针为NULL
    return head;
  }

int main()
  {
  LinkList L1;
  L1=Create ();
  printf ("链表是:\n");
  while (L1)
    {
      printf ("%2c",L1->data);
      L1=L1->next;
    }
  system ("pause");
  return 0;
  }

注:打印出来结果中的第一个字符为"?"号,是因为采用的是带头结点的建表方式,因此只需写上:current->data=0(尾插法)或head->data=0(头插入法);则不会出现“?”号了;

你可能感兴趣的:(数据结构)