数据结构第三章学习心得

第三章的开始学习了栈

栈有他的基本性质,又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

栈可以用来在函数调用的时候存储断点,做递归时要用到栈

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上的视频后写了出来然后复现了一遍,感觉有点恍然大悟。实践一设计了思路,但是感觉差临门一脚,就在网上查询资料的帮助下解决了。

目标:希望以后在课上的问答环节能够争取完成每一个问题,目前经常出现答错或者没有思路的问题。

 

posted @ 2020-04-25 11:12  1907潘健聪  阅读(212)  评论(0编辑  收藏  举报