首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于单链表的头安插和尾插入法

2013-07-11 
关于单链表的头插入和尾插入法最近在自学数据结构,下面是单链表头插入和尾插入的代码typedef struct Lnode

关于单链表的头插入和尾插入法
最近在自学数据结构,下面是单链表头插入和尾插入的代码

typedef struct Lnode
{
    ElemType data;
    struct Lnode *next;
}Lnode;

Lnode *createHead_LinkList(void)
{
    int data;
    Lnode *head,*p;
    head=(Lnode *)malloc(sizeof(Lnode));
    head->next=NULL;
    
    while(1)
    {
        scanf("%d",&data);
        if(data==32767) break;
        p=(Lnode *)malloc(sizeof(Lnode));
        p->data=data;
        p->next=head->next;
        head->next=p;
    }
    return head;
}

Lnode *createRear_LinkList(void)
{
    int data;
    Lnode *head,*p,*q;
    head=p=(Lnode *)malloc(sizeof(Lnode));
    p->next=NULL;
    while(1)
    {
        scanf("%d", &data);
        if(data==32767) break;
        q=(Lnode *)malloc(sizeof(Lnode));
        q->data=data;
        q->next=p->next;
        p->next=q;
        p=q;
    }
    return head;
}

我不太清楚这几行代码是如何完成插入的。求解释
p->next=head->next;
        head->next=p;

 q->next=p->next;
        p->next=q;
        p=q;


[解决办法]
打错了..
p->next=head->next;     //p->next指向head后面的结点


        head->next=p;
每次添加的元素都插入到头结点的后面(头插法)
 q->next=p->next; //q->next=NULL
        p->next=q; //把q插入到链表末尾
        p=q;       //p指向链表末尾结点
每次添加的元素都插入到链表的末尾(尾插法) 
[解决办法]


头插入

[解决办法]
0
[解决办法]
->
[解决办法]
a
[解决办法]
->
[解决办法]
b
[解决办法]

|0|是头结点head
p->
[解决办法]
n
[解决办法]
->NULL;新建结点,next没有指向,暂时认为NULL,把p插入到0a之间

p->next = head->next
      p
      
[解决办法]


[解决办法]
0
[解决办法]
->
[解决办法]
a
[解决办法]
->
[解决办法]
b
[解决办法]


head->next = p

[解决办法]
0
[解决办法]
->p
     
[解决办法]

    
[解决办法]
a
[解决办法]
->
[解决办法]
b
------解决方案--------------------





[解决办法]
0
[解决办法]
->|n|->
[解决办法]
a
[解决办法]
->
[解决办法]
b
[解决办法]



末尾插入

[解决办法]
0
[解决办法]
->
[解决办法]
a
[解决办法]
->
[解决办法]
b
[解决办法]
->NULL
|0|是头结点head;p->
[解决办法]
b
[解决办法]
;p->next = NULL
q->
[解决办法]
n
[解决办法]
->NULL;新建结点,next没有指向,暂时认为NULL,把q插入到p之后

q->next = p->next;
           p    q
           
[解决办法]
    
[解决办法]


[解决办法]
0
[解决办法]
->
[解决办法]
a
[解决办法]
->
[解决办法]
b
[解决办法]
->NULL

p->next = q;

           p -> q


           
[解决办法]
    
[解决办法]


[解决办法]
0
[解决办法]
->
[解决办法]
a
[解决办法]
->
[解决办法]
b
[解决办法]
  NULL 

p = q;//因为p要始终指向最后一个结点,前面插入一个后,p就要后移
                p
                
[解决办法]
          

[解决办法]
0
[解决办法]
->
[解决办法]
a
[解决办法]
->
[解决办法]
b
[解决办法]
->
[解决办法]
n
[解决办法]
->NULL

        


我是在回复框内编辑的内容,不知道提交后会不会错位。
总之,要理解思想,我简单的模拟下,应该能理解。自己画拉下就明白了。

热点排行