第三章学习小结

本章学习到了栈和队列的相关定义以及相关操作。

一、栈

栈的定义:仅在表尾进行插入或删除操作的线性表。

                  表尾端称为栈顶,表头端称为栈底。

特点: 后进先出

数据元素之间存在一对一的关系

 顺序栈的定义

#define MAXSIZE 100

typedef struct

{

    SElmeType *base;        //栈底指针

    SelemType *top;           //栈顶指针,初值指向栈底

    int Stacksize;                //栈可使用的最大容量

}SqStack;

 

base的值为NULL,表明栈结构不存在。

 

栈空时,base和top的值相等,都指向栈底;

栈非空时,top始终指向栈顶元素的上一个位置。

 

以数组构成顺序栈的情况下,top为-1的时候表示空栈
一个数组以数组底为栈底,入栈时必须先把栈顶标志加一之后才能写入,出栈时需要先读出再把栈顶标志减一,栈为空的时候标志肯定不能是0,因为它标志着栈顶元素是数组的第一个值,所以top=-1表示空栈。

 

二、递归

递归的定义:函数调用自身

    函数调用时保留的局部变量的值、返回地址、参数值

    函数调用时栈区保留现场和恢复现场

    使用栈来实现递归

优点:结构清晰。程序易读

缺点:每次调用要生成工作记录,保存状态信息入栈;返回时要出栈,恢复状态信息,时间开销大

递归过程退回的顺序是它前行顺序逆序

 链表是一种递归的数据结构

三、

队列的定义:只允许在表的一段插入,表的另一端删除元素。

特点:先进先出

数据元素之间存在一对一的关系

 

循环队列的顺序表示:三方面定义结构体:  数组、front、rear

 

链队:  尾部入队(入队跟尾指针有关),头部出队

带有头结点(入队操作占优势)

无论是否带有头结点,都要特别处理rear指针

 

链队的类型定义:

typedef struct node

{
    ElemType data;
    struct node *next;
}LNode;

 

typedef struct

{
    LNode *front;    //头指针

    LNode *rear;    //尾指针
}LinkQueue;

 

完成作业或实践时解决困难的经验分享:

写代码要很有耐心,多用注释,专心用同一个方法来完成作业和实践,不懂的时候多问问班里的大佬还有参考网上资料,一定能解决问题的。

 

这段时间,你参考了哪些值得向大家分享的资料?每一项推荐都请说明推荐理由及列出相关链接(或书目名称,具体页码):

https://blog.csdn.net/qq_41264055/article/details/86493705

 

目前学习过程中存在的困难,待解决或待改进的问题:

不够细心,没有多用注释来解决问题;完成作业期间参考了老师上课时给我们的解题思路,然后再根据书上的方法东改西改,发现运行不了,有很多bug,因为代码的能力不够,而且写代码很没有耐心没有一直用同一个方法解决问题,就一直在改方法。

 

上次博客确定的目标达到了吗?如果没达到,请分析原因:上次博客的目标还没有达到,学习到了一些代码的知识,但是打代码的能力还是很弱,理解比较慢,写作业时候还是会花费很长时间来理解题目来完成,效率太低。

 

接下来的目标:学无止境多学点代码知识,然后提高作业的完成效率,多看书多实践,希望能够更耐心点,上课更专心点。

posted @ 2019-03-23 17:36  0000007  阅读(180)  评论(5编辑  收藏  举报