链表的创建以及链表节点的添加和删除

Posted ljbguanli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表的创建以及链表节点的添加和删除相关的知识,希望对你有一定的参考价值。

单链表的创建过程有下面几步:

1 ) 定义链表的数据结构;

2 ) 创建一个空表;

3 ) 利用malloc ( )函数向系统申请分配一个节点;

4 ) 将新节点的指针成员赋值为空。

若是空表,将新节点连接到表头;若是非空表,将新节点接到表尾;

5 ) 推断一下是否有兴许节点要接入链表,若有转到3 ),否则结束;

单链表的输出过程有下面几步

1) 找到表头;

2) 若是非空表。输出节点的值成员,是空表则退出;

3 ) 跟踪链表的增长,即找到下一个节点的地址;

4) 转到2 ).

  接下来来一步步实现链表的创建:
   
(1)定义一个结构体类型来存储这个节点
  链表中的每个节点的数据类型为结构体类型。节点有两个成员:整型成员(实际须要保存的数据)和指向下一个结构体类型节点的指针即下一个节点的地址(其实,此单链表是用于存放整型数据的动态数组)。链表按此结构对各节点的訪问需从链表的头找起,兴许节点的地址由当前节点给出。不管在表中訪问那一个节点,都须要从链表的头開始,顺序向后查找。

链表的尾节点因为无兴许节点。其指针域为空,写作为NULL。
         技术分享
                图1:节点存储

struct node
{
    int data;  //整形data用来存储具体的数值
    struct node *next; //存储下一个节点的地址,类型同样,所以指针类型必须也是struct node *类型的指针
};   //注意结构体定义后面须要;

(2)链表创建

  单链表有一个头节点head,指向链表在内存的首地址。

当链表还没有建立的时候头指针为空(NULL)。

struct node *head;
head = NULL; //头指针为空

  创建第一个节点,并用暂时指针p指向这个节点。(利用malloc函数)

struct node *p;
p = (struct node *)malloc(sizeof(struct node));

  接下来分别设置新创建的这个节点的左部分和右部分。

scanf("%d",&a);
p ->data = a;   //将数据存储到当前节点da中
p ->next = NULL; //设置当前节点的下一个节点为空
//->结构体指针运算符。訪问结构体内部成员

  完整代码例如以下:

#include <stdio.h>
#include <stdlib.h>
struct node
{
    int data;
    struct node *next;
};
int main()
{
    struct node *head,*p,*q,*t;
    int i,n,a;
    scanf("%d",&n);
    head = NULL; //头指针为空

    for(i=1;i<=n;i++)   //循环读入n个数
    {
        scanf("%d",&a);
        p = (struct node *)malloc(sizeof(struct node));
        p ->data = a;
        p ->next = NULL;
        if (head==NULL)
            head = p;  //假设这是第一个创建的节点,则将头指针指向这个节点
        else
            q ->next = p;  //上一个节点的后继指针指向当前节点
        q = p;  //指针q也指向当前节点
    }
    //输出链表中的全部数
    t = head;
    while(t!=NULL)
    {
        printf("%d",t ->data);
        t = t ->next;  //继续下一个结点
    }
    getchar();
    return 0;
}

待续….

參考文献:
①malloc函数具体解释:
http://blog.csdn.net/xw13106209/article/details/4962479
②C语言单向链表的创建:
http://blog.csdn.net/xubin341719/article/details/7091583










以上是关于链表的创建以及链表节点的添加和删除的主要内容,如果未能解决你的问题,请参考以下文章

数据结构和算法之单向链表六:链表的反转以及链表节点的删除

JavaScript单向链表的创建遍历插入删除操作

链表:在链表的末尾添加一个节点+删除链表中值为value的节点

Java中双向链表的代码实现

编写程序,建立一个带有节点的单向链表,输入字符串,并按从小到大顺序组织到链表中

数据结构之链表(JAVA)