写出利用尾插法和头插法建立一个含有头结点的非循环单链表的算法
尾插法建立:保证新生成的结点成为整体链的尾结点就行
(1)下面用中文描述的尾插法算法
建立一个头结点并令指针S指向头结点
读入数据X
循环:当读入的数据符合条件时,重复执行
建立一个新结点
把x置入新结点的数据域,且新结点的指针域赋值为空
把新结点的链接到原来的单链表的尾部
使当前新结点成为尾部结点,即令指针s指向链表的尾结点。
输入新数据
循环结束
(2)下面给出用C描述的尾插法算法
static createlist1(&L)
{ s=(Linklist)malloc(sizeof(Lnode)) //生成一个新结点,且指针s指向它
L=s ; //由L返回链的头结点,标识链
s.next=NULL;
sanf(“input data x“,&x);
while (x!=0) /此处假设读入数据为0时结束建立链表
{ t=(Linklist)malloc(sizeof(Lnode)); // 建立新结点
t.data=x ; t.next=NULL;
s.next=t;
s=s.next
sanf(“input data x“,&x);
}
}
头插法建立:保证新生成的结点成为头结点的直接后继就行
static createlist2(&L)
{ L=(Linklist)malloc(sizeof(Lnode)) //生成一个新结点,且指针s指向它
L.next=NULL; //由L返回链的头结点,标识链
sanf(“input data x“,&x);
if (x!=0) {
t=(Linklist)malloc(sizeof(Lnode)); // 建立新结点
t.data=x ; t.next=NULL; } //建立第一个数据结点
sanf(“input data x“,&x); //下面开始循环建立其它结点
while (x!=0) /此处假设读入数据为0时结束建立链表
{ t=(Linklist)malloc(sizeof(Lnode)); // 建立新结点
t.data=x ; .t.next=L.next
L.next=t
sanf(“input data x“,&x);
} }
一如往昔……