第三章学习小结

Posted liusiling

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三章学习小结相关的知识,希望对你有一定的参考价值。

.第三章学习了栈和队列,有了第二章对线性表的学习,已经了解学习的一个思维过程,在这里分享一下。例如学习栈,首先要了解它的存取特点,然后是学习它的ADT,然后从具体的方面学习,分别从两种不同的存储结构来探讨它具体操作的实现。这个是整个数据结构学习的基本思路,掌握了思路,我觉得对于理清楚整一本书很有帮助。

2.在对于栈的学习,课本上给出的案例是括号匹配问题,还有简单的四则运算,在解决这两个问题的时候,要考虑到数据是先进后出,才想到采用栈结构。并且在打代码之前,一定要加以详细的注释,通常会有一些很小的bug,看了老半天看不出来。解题先用文字大概将算法写出来,再慢慢完善算法里所欠缺的。

3.对于队列的学习,个人觉得较为重要的一点是要对队列是否带头节点来操作,认真分析,这样能够对整个队列掌握得更透彻,这里分享一下老师的代码

链式队列的实现:

一、类型定义
typedef struct node{
ElemType data;
struct node *next;
}LNode;

typedef struct{
LNode *front;
LNode *rear;
}LinkQueue;

二、各种操作的实现分析

1、初始化
LinkQueue Q;
不带头:Q.front = NULL; Q.rear = NULL;
带头:Q.front = new LNode; Q.front->next = NULL; Q.rear = Q.front;

2、判断队空
不带头:Q.front==NULL 或者:Q.rear==NULL
带头:Q.front->next==NULL 或者:Q.front==Q.rear

3、判断队满()//由new申请空间后判断,故无需定义该函数

4、在队头入队
不带头空队列:p = new LNode;
cin >> p->data;
p->next = NULL;
Q.rear = p; 
Q.front = Q.rear; //本情况独有
不带头1个结点:p = new LNode;
cin >> p->data;
p->next = NULL;
Q.rear->next = p; //本情况独有
Q.rear = p;
不带头2个结点://同上

带头空队列:p = new LNode;
cin >> p->data;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
带头1个结点://同上
带头2个结点://同上

5、在队头出队
不带头1个结点:p = Q.front;
Q.front = Q.front->next;//Q.front被赋值为NULL
e = p->data;
delete p;
Q.rear = NULL; //本情况独有,将rear恢复到初始状态

不带头2个结点:p = Q.front;
Q.front = Q.front->next;
e = p->data;
delete p;

带头1个结点:p = Q.front->next;
e = p->data;
Q.front->next = p->next;
delete p;
Q.rear = Q.front; //本情况独有,将rear恢复到初始状态
//上面语句的执行条件:空对列
带头2个结点:p = Q.front->next;
Q.front->next = p->next; //Q.front->next被赋值为NULL
e = p->data;
delete p;

4.遇到问题都是一些很细微的问题,例如对string的用法不太了解,在定义数组的数组的时候,要输入变量值才能定义

5.接下来多看源码,不懂多百度多问

以上是关于第三章学习小结的主要内容,如果未能解决你的问题,请参考以下文章

第三章学习小结

第三章学习小结

第三章学习小结

第三章学习小结

第三章学习小结

第三章学习小结