目  录

一、创建链表节点

二、创建链表

三、创建链表

四、查找元素

五、插入元素

六、删除元素

七、静态链表


一、创建链表节点

/*
struct node{typename data;   //数据域node* next;    //指针域
};选择带头结点的链表*/struct node{int x;node* next;
}

二、创建链表

  1. (C语言)malloc与free:

    /*在头文件#include <stdlib.h>申请一个内容空间typename* p=(typename*)malloc(sizeof(typename));但是malloc(sizeof(typename))返回的是未确定类型的指针void*,所以要加上装置类型转换(*typename)free(p) 释放空间
    */int* p=(int*)malloc(sizeof(int));free(p);/*如果失败,返回空指针NULL并赋值给p如,int* p=(node*)malloc(100000000*sizeof(node*));  可能会申请空间失败*/
  2. (C++)new与delete:
    /*new是C++中用来申请动态空间的运算符typename* p=new typename;delete(p);是与new一同使用的,方式内存泄露*/node* p=new node;
    delete(p);

三、创建链表

node* create(int arr[]){node *p,*pre,*head;  //pre保存当前结点的前驱结点,head为头结点node* head = new node;head->next=null;pre = head;for(int i=0;i<arr.length();i++){  //创建链表五步走node* p = new node;  //第一步:申请一个内存空间p->data = arr[i];  //第二步:将数据赋值给结点的数值域p->next = null;  //第三步:操作新结点的左边,将新结点p->next赋值为nullpre->next = p;  //第四步:操作新结点的右边,将前驱结点的next指针指向ppre=p;    //第五步:把新结点设置为前驱结点}return head;
}/*引用方式*/node* L = create(arr);  //arr是数组
L = L->next;  //L因为第一个结点是空结点head,所以需要有数值域需要将指针后移
while(L!=NULL){printf("%d",L->data);L = L->next;  //移动指针
}

四、查找元素

/*比如查找所要的数的个数*/int search(node* head,int x){  //需要一个链表和查找的数int count = 0;  //计数器为0node* p = head->next;while(p!=null){if(p->data==x){  //值相等,计数器+1count++;}p->next;  //指针向后挪一位}return count;
}

五、插入元素

/*比如插入一个数x*/void search(node* head,int pos,int x){  //需要一个链表、插入的位置和插入的数node* p = head;for(int i=0;i<pos-1;i++){  //移动指针到需要插入位置的前一个位置p->next;}node* q = new node; //申请一个新的结点q->data = x;q->next = p->next;p->next = q;
}

六、删除元素

void delete(node* head,int x){  //需要一个链表和删除的数node* p = head->next;  //p从第一个点开始枚举node* pre = head;    //pre始终指向前一个结点,因为需要前一个结点的->next指向删除结点的后一个结点,p是pre的后一个结点,pre是p的前一个结点while(p!=null){if(p->data==x){  //找到要删除的元素了pre->next = p->next; //删除结点的next指向的结点赋值给删除结点前一个结点的nextdelete(p);p=pre->next;  //p指针后移一位}else{  //若不是,两个指针后移pre = p;p = p->next;}}
}

七、静态链表

若结点数是较小的整数,可以采用静态链表。其实现的原理是hash,即通过建立一个结构体,并领数组的下标直接表示结点的地址,以达到直接访问数组中元素就能访问结点的效果,银外由于结点的访问非常方便,因此静态结点不需要头结点的。

struct Node{int data;  //数据类型随意int next;
}node[size];/*
如果初始结点的地址是11111,第二个结点的地址是22222,第三个节点是33333,且第三个结点为链表的末尾,那么,整个静态链表的结点就可以通过下面的写法实现node[111111].next = 222222;
node[222222].next = 333333;
node[333333].next = -1;
*/

【2019暑假刷题笔记-链表】总结自《算法笔记》相关推荐

  1. $2019$ 暑期刷题记录 $2$(基本算法专题)

    $ 2019 $ 暑期刷题记录 $ 2 $ (基本算法专题) $ by~~wch $ $ BZOJ~1958~Strange~Towers~of~Hanoi $ (动态规划,递推) 题目大意: 求有 ...

  2. 【2019暑假刷题笔记-树的遍历】总结

    关于树这一块,前期没有做一个学习的绪论,因为时间来不及了.在总结上回顾一下这些题目的一些特点 树的遍历的是数据结构树这一块中的一部分. 树的遍历和二叉树的遍历本质上相同.二叉树用指针也可以做,但是在考 ...

  3. 【2019暑假刷题笔记-图的存储和图的遍历】绪论(代码模板-总结自《算法笔记》)

    一.图的存储 图有两种存储办法,分别是邻接矩阵(顶点数≤1000,0表示不连通,数字表示权重)和邻接表(用vector数组实现),具体实现如下: /* 邻接矩阵,G[][] */G[2][3]=1; ...

  4. 【2019暑假刷题笔记-STL绪论(二)】总结自《算法笔记》

    目录 五.queue的常见用法 六.priority_queue的常见用法 七.stack的常见用法 八.algorithm头文件下的常用函数 五.queue的常见用法 queue也就是队列,是STL ...

  5. 【2019暑假刷题笔记-STL绪论】总结自《算法笔记》

    目     录 一.vector的常见用法 二.set的常见用法 三.string的常见用法 四.map的常见用法 一.vector的常见用法 vector是一种可变长数组,常用于使用vector通过 ...

  6. 《剑指offer》刷题——【链表】从尾到头打印链表

    <剑指offer>刷题--[链表]-<从尾到头打印链表> 问题分析: 递归实现: 1. 无返回值 2. 有返回值(ArrayList) 问题分析: 从头到尾打印链表比较简单,那 ...

  7. 力扣刷题——单链表系列——第一题:移除链表元素,从此链表初窥门径,神挡杀神~

    题目链接:力扣 力扣刷题------>单链表系列 第一种解法:在原链表上进行操作,小红日烧脑版 /*** Definition for singly-linked list.* public c ...

  8. 链表的回文结构(算法笔记)

    单链表的换头问题 如果涉及到单链表的相关算法题中涉及到换头操作,方法需要返回值 简单问题一 打印两个有序链表的公共部分 问题二 判断一个链表是否为回文结构 [题目]给定一个单链表的头节点head,请判 ...

  9. 【算法笔记题解】《算法笔记知识点记录》第三章——入门模拟1——简单模拟

    如果喜欢大家还希望给个收藏点赞呀0.0 相关知识点大家没基础的还是要看一下的,链接: <算法笔记知识点记录>第三章--入门模拟 由于放原题的话文章实在太长,所以题多的话我只放思路和题解,大 ...

最新文章

  1. linux下的文件和文件夹的权限问题
  2. SAP MM供应商主数据表
  3. iPIN CEO 杨洋:AI 还未被大规模用在工作中,缺的是认知智能
  4. Coding and Paper Letter(六)
  5. Codeforces 845 C. Two TVs 思路:简单贪心算法
  6. 推荐一个Chrome扩展应用,能够自动去除CSDN广告
  7. Mac快捷键和实用技巧
  8. 关于直播学习笔记-005-nginx-rtmp-win32在Win10上使用
  9. 递归下降分析器的设计java_数据结构(Java版)教与学(48和60学时教学大纲)
  10. 源码编译mysql-5.6.15
  11. 几个清华和北邮学霸公众号,值得学习
  12. .Net中的Placeholder控件
  13. 基本的WEB渗透测试
  14. 清明上河图30亿像素_清明上河图全图下载
  15. w3school JavaScript笔记2 ——JavaScript HTML DOM
  16. 游程编码用matlab实现代码_二值图像游程编码算法的Matlab实现 -
  17. 两种IP冲突检测方法
  18. Golang工程师历年企业笔试真题汇总
  19. linux上2048游戏程序,在Linux系统下完全可以玩2048游戏
  20. UVALive 6922 Reverse Polish Notation

热门文章

  1. 给 Easyui Datagrid 扩展方法
  2. javascript:void到底是个什么?
  3. AB1601 烧写程序后上电后无反应
  4. Linux workqueue工作原理
  5. html新人入门代码,HTML入门(示例代码)
  6. EOS 共识机制 (1)DPOS共识介绍
  7. 数据结构--稀疏矩阵的一种实现
  8. 天线发射功率计算公式_怎样计算天线直径发射功率卫星租用带宽
  9. (61)分析 KiFindReadyThread 函数 —— 线程优先级
  10. 私有句柄表(内核对象,并非用户对象),全局句柄表