1、栈和队列 操作 增查改删
重点 插入删除
先进先出 -->队列
先进后出 -->栈
2、链表 写之前先画图
存储数据的方式 通过指针将所有的数据链在一起
数据结构的目的 管理存储数据 方便快速查找使用

链表定义 链式存储的线性表 一对一的关系
结构体 指针 函数 循环

结构体复习:
struct 点运算符(结构体变量) 箭头运算符(结构体指针)
结构体变量.成员 的方式访问成员
字符数组 gets strcpy

链表操作
刚开始只有一个结构体
增 插入一个节点 需要申请内存
删 删除一个节点 需要释放内存

链表 需要插入的时候申请节点 需要删除的时候直接释放节点 会节约内存

静态数组 1.栈区大小 放不了态度数据
2.数组大小不能改变
动态数组 1.如果有一个数据 插入 重新申请内存 所有数据都要移动一次
2.插入删除不便
3.申请大的空间可能会申请失败

链表 有一个数据 申请一个 删除时只需要删除节点 不会影响其他节点
每次一个结构体大小 所以空间比较小 会比较节省内存 申请失败的可能性小
插入和删除比较简单不需要大规模的移动

测试的代码笔记如下:

 #include<stdio.h>
#include<stdlib.h> typedef struct node //定义结构体
{
//数据 数据域
int data;
//指针 指针域 存放下一个节点的地址
struct node*next;
}NODE, *PNODE; //别名
//结构体的类型里面不能放数据 变量里面放数据
//PNODE就是struct node* 结构体指针类型 就好比int和int* void insert(PNODE head,int data) //增
{
//准备要插入的节点
PNODE p = (PNODE)malloc(sizeof(NODE));
p->data = data;
p->next = NULL;
//开始插入
#if 0
//头插法 head->A(没有数据)->C->D->NULL 指向要插入的节点B
p->next = head->next; //B 去保留C的地址
head->next = p; //A保留的是B的首地址
//head->A(没有数据)->B->C->D->NULL
#else
//尾插法
PNODE temp;
temp = head; //找到第一个节点的位置
while (temp->next!=NULL) //判断是不是最后的节点 next是NULL
{
temp = temp->next;
}
//循环退出之后 temp指向它的最后一个节点
temp->next = p; #endif
} void findData(PNODE head, int data) //查
{
//查找
PNODE temp = head->next; //从第二个元素开始
while (temp!=NULL) //从头到尾一个一个找
{
if (temp->data == data)
{
//数据匹配
}
temp = temp->next;
} //PNODE temp = head;
//while (temp->next!=NULL)
//{
// if (temp->next->data == data) //temp指向第一个节点
// { // }
// temp = temp->next;
//}
} void changeNode(PNODE head, int data, int newData) //改
{
//修改
PNODE temp = head->next; //从第二个元素开始
while (temp != NULL) //从头到尾一个一个找
{
if (temp->data == data)
{
//数据匹配
temp->data = newData; //修改数据
}
temp = temp->next;
}
} void deleNode(PNODE head, int data) //删
{
//删除
PNODE p = head;
while (p->next!=NULL)
{
if (p->next->data == data) //下一个节点的data
{
//要删除的节点 p->next
PNODE temp = p->next;
p->next = p->next->next; //连接成功
free(temp); //释放掉temp 内存
}
}
} void deleAllNode(PNODE head) //释放所有节点
{
PNODE temp; //临时的指针作为辅助
while (head != NULL)
{
temp = head;
head = head->next;
free(temp);
}
} void print(PNODE head)//打印全部节点
{
PNODE temp = head->next;//从第二个元素开始 打印内容
while (temp != NULL)
{
printf("%d->", temp->data);
temp = temp->next;
}
printf("NULL)");
}
//链表 所有的节点都在堆区 用一个指针去管理这个链表 每次插入一个数据 重新申请节点
//事先申请好空间 数组/动态数组 临时申请 int main()
{
PNODE head; //指针 结构体类型的指针
head = (PNODE)malloc(sizeof(PNODE)); //申请一个空的节点 为了后面的增查改删
//第一个节点可以窜数据但是不存 以浪费空间的代价 换取后面操作的简单
head->next = NULL; //表示后面没有其他节点
for (int i = ; i < ; ++i)
{
insert(head, i);
}
print(head);
deleAllNode(head); getchar();
return ;
}

2019-04-01  08:31:37

C++学习(三十四)(C语言部分)之 链表的更多相关文章

  1. 前端学习(三十四)对象&模块化(笔记)

    人,工人 //类的定义    function Person(name,age){ //构造函数        //工厂模式        //1.原料        //var obj = new ...

  2. Java开发学习(三十四)----Maven私服(二)本地仓库访问私服配置与私服资源上传下载

    一.本地仓库访问私服配置 我们通过IDEA将开发的模块上传到私服,中间是要经过本地Maven的 本地Maven需要知道私服的访问地址以及私服访问的用户名和密码 私服中的仓库很多,Maven最终要把资源 ...

  3. shell学习三十四天----printf详解

    http://blog.csdn.net/shanyongxu/article/details/46744055

  4. python学习 (三十四) Python文件操作

    1 写文件 my_list = ["] my_file = open("myfile.txt", "w") for item in my_list: ...

  5. python学习三十四天函数高阶函数定义及用法

    python函数高阶函数是把函数当成一个变量,传递给函数作为参数,或者函数的返回值里面有函数,都称为高阶函数, 1,把函数作为参数传递 def dac(x,y): return x+y def tes ...

  6. Salesforce LWC学习(三十四) 如何更改标准组件的相关属性信息

    本篇参考: https://www.cnblogs.com/zero-zyq/p/14548676.html https://www.lightningdesignsystem.com/platfor ...

  7. 孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习

     孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.close() 当一个file对象执行此方法时,将关闭当前 ...

  8. 风炫安全web安全学习第三十四节课 文件包含漏洞防御

    风炫安全web安全学习第三十四节课 文件包含漏洞防御 文件包含防御 在功能设计上不要把文件包含的对应文件放到前台去操作 过滤各种../,https://, http:// 配置php.ini文件 al ...

  9. “全栈2019”Java多线程第三十四章:超时自动唤醒被等待的线程

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  10. “全栈2019”Java第三十四章:可变参数列表

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. 机器学习---笔记----Python基础

    一. python简介 1. python 具有丰富强大的库,常被称为胶水语言,能够把用其他语言制作的各种模块很轻松地联结在一起 2. python强制使用空白符(white space)作为语句缩进 ...

  2. Win10系列:VC++绘制几何图形1

    本小节主要介绍如何使用Direct2D来绘制几何图形,其中会使用到FillGeometry函数和FillEllipse函数,FillGeometry函数用于填充几何图形的内部区域,而FillEllip ...

  3. C++ 解析一

    C++ 类和对象C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计.类是 C++ 的核心特性,通常被称为用户定义的类型.类用于指定对象的形式,它包含了数据表示法和用于处理数据 ...

  4. ie浏览器get url返回404问题

    昨晚同事说之前给的接口不能get方式的,直接在ie浏览器访问返回404,说明是参数有问题. 同样的接口使用curl和postman请求都正常,其他ie之外的浏览器也都正常响应. 记录下排查过程: 问题 ...

  5. 4.4 C++虚析构函数

    参考:http://www.weixueyuan.net/view/6373.html 总结: 构造函数是不能声明为虚函数的,析构函数可以被声明为虚函数. 将基类的析构函数声明为虚函数之后,派生类的析 ...

  6. ubuntu GUI程序开机自启设置

    在 主目录下,即 $HOME路径下新建 或编辑 .gnomerc 文件,将开机启动脚本写在这里如下:gedit ~/.gnomerc#!/bin/bashcd /home/xxxx/openUI./o ...

  7. js正则学习

    一直对正则很纠结也很畏惧,以前感觉花时间理解一个个奇奇怪怪的符号,还不如直接百度谷歌之. 但知其然不知其所以然也是种痛苦,所以花了两天稍微学了一下,虽然没学很深入彻底,但也比之前进步不少,特此笔记. ...

  8. bootstrap table 分页显示问题

    1.bootstrap-table客户端分页 客户端分页的数据源可以是后台服务器端传递过来(一次性获取,即获取所有你需要的数据),点击页码不再请求后台,利用页面缓存分页;cache : true, / ...

  9. 关于Java课堂实验中的一些总结(Scanner)

    import java.util.Scanner; 这个头文件是java里面用来输入东西的,就相当于c++里面的iostream输入流...?暂且这么理解吧 然后使用方法:Scanner in = n ...

  10. DevExpress ASP.NET Bootstrap Controls v18.2新功能详解(一)

    行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExpress ASP.NET Boot ...