ds第三章学习记录
作者:互联网
一.
栈 :LIFO top base
队列:FIFO front rear
二.
顺序栈新类型定义
typedef struct
{
SElemType data[MAXSIZE];
int top;
int size;
}Stack; //用静态数组
初始化---------> top=0 size
push---------> *s.top++=e
pop--------->e=s.data[--s.top]
typedef struct
{
SElemType *base;
SElemType *top;
int size;
}Stack; //指针 动态性强
初始化---------> 分配数组空间 top=base size
push---------> s.data[s.top++]=e
pop--------->e=*--S.top
//注意isEmpty isFull
队列
·假溢出 模运算
Q.rear = (Q.rear + 1)%6 如何区别队满还是队空呢? (1)少用一个元素空间, 即队列空间大小为m时,有m-1个元素就认为是队满。 队空的条件: Q.front = Q.rear 队满的条件: (Q rear+ 1)%M心CQSIZE = Q.front (2)另设一个标志位以区别队列是 “空” 还是 “满"。 初始化 Q.front=Q.rear=O
三.
链栈--------->链表
typedef struct StackNode ElemType struct StackNode *next; ) StackNode,*LinkStack; 链队
四. 递归与迭代
自底向上 和 自顶向下
底:小规模问题(终止条件)
顶:大规模问题(原问题)
自底向上的求解方法:由最小规模问题逐步向上求解,直至求出原问题的解。
总结:自底向上的求解过程,其实就是一个填表的过程!
顺序存储 用它的下标来表示自变量?
自顶向下的求解方法:从原问题出发,分解出规模减小了的子问题,直至终止条件,然后由终止条件的结果进行回推,求出原问题的值。
自顶向下的求解方法就是真正正的一个递归求解的方法
使用递归的过程来求解问题 避免重复计算:数组的这种特性 作为一个辅助的数据结构帮助解决问题 (备忘录的读写速度
数组的什么特性呢?随机存取 根据数组的下标 迅速往这个下标里面的元素写入和读取
通常把自底向上求解的编程方法称为迭代,把自顶向下的编程方法称为递归。
其实你实现这个迭代。在我们的编程的这个结构里面,是用什么结构来实现迭代? 循环
两者比较:递归编程简单,只需要关注本层逻辑。
实递归来写代码 代码会比较简单,而且可读性比较强。
特点:只需要关注本层逻辑
递归有可能出现重复子问题的情况!
五.
六.
小组讨论代码
1输入编号和积分时 因为是编号升序 从上一条编码的下一个位置开始遍历 减少时间
2给出姓名来查找时 可以两头一起开始往中间靠 这样时间能减半!
标签:底向上,第三章,递归,记录,top,求解,自顶向下,ds,rear 来源: https://www.cnblogs.com/drgnibasaw/p/12775216.html