数据结构第三章学习心得
第三章的开始学习了栈
栈有他的基本性质,又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈可以用来在函数调用的时候存储断点,做递归时要用到栈
const int MAXSIZE = 100; typedef struct { char data[MAXSIZE]; int top; int stackSize; }SqStack; void initStack(SqStack& s) { s.top = 0; s.stackSize = MAXSIZE; }//顺序栈
在学习链表开始,我就将所有学习过的数据结构类型定义都保存了下来,方便复习和深入理解。
接下来学习了汉诺塔问题,以汉诺塔问题为媒介,学习了递归和迭代的思维。但在解决问题时,我们有学习找规律去解决汉诺塔问题而不是一味的递归(在数据较大时难以通过递归快速解决问题)。
接下来学习了队列。队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
typedef int QElemType; typedef int Status; typedef struct QNode { QElemType data; struct QNode* next; }QNode, * QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; Status InitQueue(LinkQueue& Q) { Q.front = Q.rear = new QNode; Q.front->next = NULL; return 1; }//队列
队列大部分内容都是自学,目前我对队列理解还不够深刻,运用起来也不算流畅。还需要继续练习。
到了小组作业的环节,我们组一开始在采用什么数据结构上考虑了很久。最后采用了链表,代码方面问题不大,主要是时间的减少,通过直接遍历的方法解决了。
作业和实践:作业一开始比较难以下手,看完了老师在mooc上的视频后写了出来然后复现了一遍,感觉有点恍然大悟。实践一设计了思路,但是感觉差临门一脚,就在网上查询资料的帮助下解决了。
目标:希望以后在课上的问答环节能够争取完成每一个问题,目前经常出现答错或者没有思路的问题。