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

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

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

时间: 2024-10-29 00:26:00

链表的创建以及链表节点的添加和删除的相关文章

单链表 初始化 创建 头插法 尾插法 插入 删除 查找 合并 长度

#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR -1 #define TRUE 1 #define FALSE -1 #define NULL 0 #define OVERFLOW -2 #define ElemType int #define Status int typedef int ElemType typedef int Status #define LEN sizeof(LNode) #

父兄子节点的获取及子节点的添加、删除、克隆操作

第一.父兄子节点的获取 1.父节点的获取 某节点的parentNode属性值即为该节点的父节点.示例: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <body> <div id="father"> <div id="son1"></div> </

XML节点进行添加,删除,查找和删除操作

从网上整理所得 XMLDocument来操作XML比较简单,虽然有时效率不是很高.代码如下 已知有一个XML文件(bookstore.xml)如下: <?xml version="1.0" encoding="gb2312"?><bookstore> <book genre="fantasy" ISBN="2-3631-4"> <title>Oberon's Legacy<

单链表节点的添加和删除

单链表的节点定义 struct ListNode { int m_nValue; ListNode* m_pNext; }; 在单链表的末尾添加结点 void AddToTail(LIstNode** pHead,int value) { ListNode* pNew = new ListNode(); pNew->m_nValue = value; pNew->m_pNext = NULL; if(*pHead == NULL) *pHead = pNew; else { ListNode*

创建新的节点并添加到现有的节点树上

创建一个新的元素节点: var node = document.createElement( '标签名' ) ;  //此时此元素只存在于内存中 创建一个新的文本节点: var txt = document.createTextNode( '文本内容' ) ; 创建一个文档片段对象: var fragment = document.createDocumentFragment( ); 文档片段对象:它本身不对应任何HTML标签,作用类似于一块透明胶布(本质就是内存中的一块空间),可以容纳其他的节

节点的添加与删除

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 8 <body> 9 <button onclick="addFun()">添加节点</button> 10 <button onclick="remo

链表 :链表的创建+遍历

今天从数据结构开始看起,首先了解的是链表.我先从链表的创建开始,本人习惯使用java,开始介绍也使用java实现 链表 链表的创建 1.1连表的插: package link; /**  * linkCreate是创建链表,主要有链表的创建,  * 链表建立,链表的测试,打印链表的长度  * @author Administrator  * 在这里使用的是  *  */ public class LinkCreate<Item> { private Node first; private in

链表的创建,插入,删除,输出基本操作

#include<stdio.h>#include<cstdlib> struct student  //定义一个学生结点,结点包括值域和指针域{ int num;//学号 char name[20];//姓名 char address[20];//地址 struct student *next;//定义结点的指针域,指向下一个结点};typedef struct student LIST;LIST *CreateList();LIST *InsertNode(LIST *h,LI

DOM操作——JavaScript怎样添加、移除、移动、复制、创建和查找节点

(1). 创建新节点 1 createDocumentFragment() // 创建一个DOM片段 2 createElement() // 创建一个具体的元素 3 createTextNode() // 创建一个文本节点 (2). 添加.移除.替换.插入 1 appendChild() 2 removeChild() 3 replaceChild() 4 insertBefore() // 在已有的子节点前插入一个新的子节点 (3). 查找 1 getElementsByTagName()