数据结构和算法
-
培养我们的高级思维: 数据结构算法掌握–》有利于做上层应用开发
-
提高程序的运行效率,采用不同的存储方式,数据的增删改查操作的效率是不一样的
-
主要内容
顺序表的基本操作
链表基本操作
(增加,删除,更改,查找数据)
栈和队列
树和二叉树
常见的排序算法
- 链表基本操作
- 单链表
- 单向循环链表
- 双向链表
- 双向循环链表
- 内核链表
顺序表
- 本质:就是前面C语言学习过的数组,在数组的基础上做了二次封装,封装了结构体
总结成公式:
struct 你自己取名字
{
类型 buf[大小];
int last; //标记最后一个有效成员数据的下标
};
单链表
- 用结构体来表示单链表
总结成公式:
struct 单链表的名字
{
int data; //数据域,用来保存数据
struct 单链表的名字 *next;
//指针域,用来指向下一个数据在内存中的地址
};
- 学习链表的套路
- | - |
---|---|
方法一 | p=p->next; //p指向p的下一个节点 赋值运算翻译成指向 |
方法二 | p->next p的下一个节点 |
方法三 | 初学者,一定要画图分析链表中指针的指向,否则很容易出现段错误 |
方法四 | 当你画完图,代码进入死胡同,要么调换一些步骤或者使用两个指针操作 |
单向循环链表
任何链表总结成模型
struct 链表的名字
{
//数据域,就是你这个链表需要存储的真实数据,可以是多个不同类型的数据
//指针域,用来存放下一个节点在内存的首地址
};
1. 特点
在普通单链表的基础上,收尾相接
2. 对比单链表的写法
while(p->next!=myhead)
3.总结链表操作的技巧
1.画图写步骤,步骤是交换
2.最厉害的武器–》用两个指针操作
3. p p->next p->next->next
4.
while(p!=NULL)
while(p->next!=NULL)
普通的双向链表
双向链表的表示
struct doublelist
{
//真实数据的数据域
struct doublelist *next; //指向后面一个节点的指针
struct doublelist *prev; //指向前面一个节点的指针
};
双向循环链表
- 特点:
最后一个节点的next指针–》指向头结点
头节点prev指针–》指向尾部 - 注意的问题
第一:循环条件
while(p->next!=head)
第二:插入,初始化
首尾相接