/**链表
入门:
首节点:第一个有效节点
尾节点:最后一个有效节点
头节点:
第一个有效节点之前的那个节点
不存放数据
方便操作
头指针,尾指针:指向头尾节点的指针变量
*确定一个链表需要几个参数:
一个参数:头指针
定义:
struct node{
int data; //数据域
//存放复杂数据
struct node * pnext; //指针域
};
typedef struct node{
int data; //数据域
struct node * pnext; //指针域
}NODE, *PNODE;
//NODE <==> struct node
//PNODE <==> struct node *
分类:
单链表:数据域+指针域
双链表:指针域+数据域+指针域
循环链表
非循环链表
操作:参见:../链表的操作及应用.cpp
算法:
广义算法:与数据的存储无关
狭义算法:与数据的存储有关
泛型:
效果:不同的存储方式,同样的操作结果
优缺点:
连续存储:
优点:
存取速度快
缺点:
插入慢,空间有限;
离散存储:
优点:插入删除快,空间无限;
缺点:存取慢
*/
/**栈
分类:
静态栈:连续
动态栈:不连续(内核是链表)
算法:
出栈;
压栈;
应用:动态栈的操作及应用.cpp
官方:
队列:#include<queue>
申请队列:queue<type>q;
判队空:q.empty();
获取队头元素:q.front();
入队:q.push();
出队:q.pop();
栈:#include<stack>
申请栈:stack<type>s;
入栈:s.push();
c出栈:s.pop();
f获取栈顶元素:s.top();
判栈空:s.empty();
*/
/**队列
分类:
链式队列:
静态队列:
循环队列:
1.静态队列为什么是循环队列
利于重复使用内存
2.循环队列需要几个参数来确定
front rear
3.各参数含义
队列初始化 front == rear == 0
队列非空 front == 第一个有效元素
rear == 最后一个有效元素的下一个元素
队列空
front==rear 不一定等于0
4.入队出队算法
入队:
数值存入rear代表的位置
r = (r+1)%数组的长度
出队:
f = (f+1)%数组的长度
5.判断空
front==rear 一定为空
6.判断满
1.增加一个标识符参数
2.尾部留空
如果rear 紧挨着front 则满
(r+1)%数组长度 == front
*/
/** 其他
1.堆内存全局共享
*/
//未完待续
【菜鸟er】C语言数据结构_入门
最新推荐文章于 2022-07-20 17:50:29 发布