0513学习总结(数据结构,链表)

一、数据结构:
1、什么是数据结构;
数据结构是把数据按照一定的组织方式组织起来,便于操作(增删查改)!

2、数据结构有哪些;
1、单个变量;int num;
2、数组:数组是用来存储比较多的数据;“户”!
3、结构体:
4、链表(单链表、双链表)、栈、队列;
5、树(二叉树、四叉树、红黑树),图,串等等;
6、大数据、云计算---—>分布式系统:有很多个计算机组成;
7、数据库:数据结构处理!里面包含了各种各样优秀的算法,各种各样优秀的数据结构!

二、我们要学习哪些数据结构:
1、链表:单链表和双链表(建立、插入、删除、逆序、遍历)等;
2、栈和队列:比链表简单一点,栈的链式存储和队列的链式存储!
3、树:


链表:
1、为什么要引入链表?
1、数组的特点:
1、数据类型一样的;
为了解决数组的数据类型是一样的缺点,引入了结构体!
2、分布的空间是连续的;
3、数组的大小一但确定就很难改变;
重新定义一个char a[20],然后将char a[10]里面的数据复制到a[20];【C++,Java里面是有可变数组的;】

3、链表的概念:
可以这么说:链表一个可以变化的数组;
可以由一个结点连接另一个结点,然后再由这个结点连接到另外的结点,形成一个锁链,锁链连接的是一个一个结点,也就是我们保存的数据,
锁链就是地址,第一个结点里面保存第二个结点的地址,第二个结点保存第三个结点的地址,以此类推。。。。


结点的构建:结构体来作为一个结点:
创建一个结点:
void create_node(int data)
{
1、分配空间:因为链表要随时能够添加和删除,采用的是“堆空间”;
2、检查堆空间是否分配成功;
3、清空申请到的堆空间;
4、填充堆空间;给data赋值!
5、让pNext执行NULL;
}


具体的操作:
1、插入:
尾部插入:
1、首先找到链表的最后一个结点,也就是尾节点;
2、将原来的尾节点指向新结点;
3、将新结点的pNext指向NULL;
void insert_tail(struct node *pHeader,struct node *new)
{
struct node *p = pHeader; //定义一个结构体类型的执行指向链表的头指针;
//1、首先找到链表的最后一个结点,也就是尾节点;
while( p->pNext != NULL) //保证p不是尾节点
{
p = p->pNext; //往后移动一个结点;
}
2、将原来的尾节点指向新结点;
p->pNext = new;
3、将新结点的pNext指向NULL;
new->pNext = NULL;
}

头结点和头指针:
链表分为两类:带头结点的和不带头结点的;
不带头结点的:头指针指向的是第一个有效结点的,保存的是第一个有效节点的地址;
带头结点的:  头指针指向的是头结点,保存的是头结点的地址;头结点里面可以不存储数据只存储第一个有效结点的地址,当然
 也可以存储比如链表的结点个数!

链表里面:不一定要有头结点,但是一定要有头指针!


1.头插:顾名思义从结点的前面插入;
伪代码:
1、将新结点的pNext指向原来的第一个有效结点;
2、将头结点的pNext指向待插入的新结点;


2、遍历:
伪代码:
1、找到链表的第一个有效结点,取出数据!查看他的pNext是不是指向NULL;如果不是,移到下一个结点;
2、取出数据,再判断pNext是不是NULL,如果不是,移到下一个结点;
3、找到最后一个结点的时候,把数据取出来!

3.中间插入:
要求:在链表里面,找到一个数据,然后呢,将待插入的结点插入到这个数据结点的后面!
伪代码:
1、遍历链表,找到相应的数据所在结点;
2、将待插入的结点插入到第一步寻找到的结点的后面;
1、将待插入的结点的pNext指向第一步结点的后面的那个结点;
2、将第一步寻找到的结点指向待插入的结点;

4.删除:
链表是用来存储数据的!既然是存储数据,有存肯定有取!有取肯定有删除!
聊天室项目中:用链表来保存在线好友!---在线链表!
A要给B发送消息:首先A将消息结构体发送给服务器,然后服务器依次遍历在线链表!

伪代码:
1、遍历链表,找到要删除的结点:Node2;
2、将Node2前面的一个结点Node1指向Node2后面的那个结点Node3;
3、将Node2所分配的空间释放;

5.逆序:
原来的顺序: 头结点-->Node1-->Node2-->Node3-->NULL;
逆序之后的顺序:    NULL <-- Node1<--Node2<--Node3<--头结点;

伪代码:【目前只有三个结点】
1、判断该链表是否只有头结点或者只有一个有效结点;【参数入口检查】
2、将Node2指向Node1,将Node3指向Node2;
3、将Node1的pNext指向NULL;
4、将头结点的pNext指向Node3;











































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值