您的位置:首页 > 理论基础 > 数据结构算法

数据结构单链表创建(头插法,尾插法)java/c/c++

2017-09-24 21:07 676 查看

单链表

在单链表中,每一个节点都有一个指针域指向后继节点,从而形成一种链接的作用。

在c/c++中可以通过结构体的形式,通过指针形成链表,在java中可以通过类的形式来实现。

附上c/c++的单链表

struct Link
{
int data;
Link *next;

};


头插法

顾名思义就是从头开始插入,插入的顺序会和链表中的数据发生颠倒。

//单链表头
Link* creatSingleLinkHead()                   //默认是插入5个数字的测试
{
Link *r;
Link *link=(Link*)malloc(sizeof(Link));
link->next=NULL;                        //将最后的尾节点置为null
for(int i=0;i<5;i++)
{
r=(Link*)malloc(sizeof(Link));
r->data=i;
r->next=link->next;                       //将r的尾部=link的尾部,也就是null
link->next=r;                            //将 r插入
}
return link;
}


以上的代码形成了一种将头部插入的方法,通过不断向头指针的next插入结构体达到目的。

尾插法

我们比较习惯的还是,插入的顺序要和存的数据的顺序一样,可以采用尾插法的方法,通过向尾部插入的方法。

刚开始学 的时候,总是想着不断给link.next赋值就能达到目的,但是这样是会让以前的数据丢失

Link* creatSingleLinkTail()
{
Link *link=(Link*)malloc(sizeof(Link));   //用来记录头结点
Link *s,*r;
r=link;                                   //开始时候指向头结点
for(int i=0;i<5;i++)
{
s=(Link*)malloc(sizeof(Link));
s->data=i;
r->next=s;                           //将s插入
r=s;                                 //将r指向s,从而可以继续向后面插入
}
r->next=NULL;                            //将尾结点赋值为空
return link;
}


java代码实现

public class Link{
protected Link next; //指针域
protected int data;//数据域

public Link(int data) {
this. data = data;
}
public int display() {
return  data;
}
}


先定义一个Link的类,定义一个指向后面的指针域,

照例,我们还是插入5个数据

public class SingleNode {
private Link link;
public SingleNode(){
link=new Link(0);
}
public void addToLinkTail(){    //尾插法
Link tempLink=link;
for (int i=1;i<=5;i++){
Link linkAdd=new Link(i);
tempLink.next= new Link(i);
tempLink=linkAdd;
}
tempLink.next=null;
}
public void addToLinkHead(){    //头插法
link.next=null;
for (int i=1;i<=5;i++){
Link linkAdd=new Link(i);
linkAdd.next=link.next;
link.next=linkAdd;
}
}
public Link getLink(){
return link;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: