数据结构之链表笔记

链表

专业术语

  • 首节点:第一个有效节点

  • 尾结点:最后一个有效节点

  • 头结点:

    • 头结点的数据类型和首节点一样

    • 是第一个有效节点之前的那个节点

    • 头结点不存放有效数据

    • 加头结点的目的主要是为了方便对链表的操作

  • 头指针:指向头结点的指针变量

  • 尾指针:指向尾结点的指针变量!

在这里插入图片描述

链表的操作

1.节点的建立

typedef struct Node{
    int data ;//数据域
    Node * next;//指针域
}Node,*pNode;

2.链表的建立

1.空链表的建立
pNode creatList(){
    pNode p = (pNode)malloc(sizeof(Node));
    p->next = NULL;
    return p;
}
2.完整的一个链表建立
pNode creatList(){
    pNode L = (pNode)malloc(sizeof(Node));//建立头结点
    pNode r = L;//再创建一个指针指向头结点
    L->next = NULL;
    int x;// x来存储输入的值
    scanf("%d",&x);
    while(x){//假设一直输入,直到输入0为止
        pNode p = (pNode)malloc(sizeof(Node));//建立新节点
        p->data = x;//把值输入进去
        p->next = NULL;//建立连接关系
        r->next = p;
        r = p;//这个r指针用来当做尾结点
    }
  return L;
}

3.链表的增删改查

1.链表的增加
1.插入到中间

在第 i 个元素之前插入一个数

pNode insertList(pNode L,int x,int i){
    pNode p = L->next;//指向首节点
    for(int j = 0 ; j < i-1 && p != NULL ; j++){
        p = p->next;//如果p不为空而且j满足条件,则继续指向下一结点
    }//直到在第i-1个元素的时候停止循环
    pNode p1 = (pNode)malloc(sizeof(Node));//创建一个新节点
    p1->data = x;
    p1->next = p->next;
    p->next = p1;
    return L;
}
2.追加到链表尾部
pNode inserEndList(pNode L,int x){
   pNode p = L;
   pNode p1 = (pNode)malloc(sizeof(Node));
   p1->data = x;
   //建立联系
   p1->next = NULL;//当做尾结点,指针域为空NULL
   p->next = p1;
   p = p1;
}
2.链表的删除

删除第 i 个元素

int deleteList(pNode L,int i){
    pNode p = L->next;
    pNode s;
    for(int j = 0 ; j < i-1 && p != NULL ; j++){
        p = p->next;
    }//找到第 i-1 个元素
    s = p->next;// s指向第i个元素
    int x = s->data;//把要删除的元素存到x中
    //修改连接关系
    p->next = s->next;//p指向第i+1元素的节点
    free(s);
    return x; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值