建立动态链表

1、所谓建立动态链表是指在程序执行过程中从无到有的建立起一个链表,即一个一个的开辟节点和输入各节点的数据,并建立起前后相连的关系。

例:写一个程序建立一个含有学生(学号、成绩)数据的单向动态链表。

约定:学号不会为0,若输入学号为0,则表示建立链表的过程完成,该节点不应连接到链表中。

提示:若输入的p1->num不等于0,则输入的是第一个节点数据(n=1),令head=p1,,也就是使head指向新开辟的节点,p1所指向的节点就成为链表中的第一个节点。再开辟另一个节点并使p1指向它,接着输入该节点的数据。若输入的p1->num!=0,则应炼乳第二个节点(n=2),将新结点的地址赋给第一个节点的next成员。接着使p2=p1,也就是使p2指向刚建立的节点。

2、实现链表输出

首先要知道链表第一个结点的地址,也就是要知道head的值。然后设一个指针变量p,先指向第一个节点,输出p所指的节点,然后使p后移一个节点再输出,直到链表的尾节点。

3、对链表的删除操作

并非是真正的删除,而是断掉原来的链接关系即可。

为了删除单向链表中的某个节点,首先要找到待删节点的前趋节点,然后将此前趋节点的指针域去指向待删节点的后续节点(q->next=p->next),最后释放被删节点所占存储空间(free(p))即可。

4、对链表的插入操作

对链表的插入是指将一个节点插入到已有链表中。

我们可以用指针变量p0指向待插入的节点,p1指向第一个节点。将p0->num与p1->num相比较,若p0->num>p1->num,此时将p1后移,并使p1指向p1所指向的节点。

例:

#include "StdAfx.h"
#include<stdio.h>
#include<stdlib.h>
 insert_snode(SLIST (*head),int x,int y)
{
    SLIST *s,*p,*q;
    s=(SLIST *)malloc(sizeof(SLIST));
    s->data=y;
    q=head;p=head->next;
    while((p!='\0')&&(p->data!=x))
    {
        q=p;
        p=p->next;
    }
    s->next=p;
    q->next=s;
}

 

posted @ 2019-02-18 20:41  巫师笔记  阅读(3735)  评论(0编辑  收藏  举报