数据结构:第三章学习小结

第三章:栈和队列

一.本章内容小结

1.栈的定义:栈的头尾分别称为“栈底”和“栈顶”,是“后进先出(LIFO)”结构的线性表。其中不含元素的栈称为“空栈”。如下图:

2.队列的定义:是一种“先进先出(FIFO)”结构的线性表,它只允许在表的一端进行插入,而在另一端删除元素。允许插入的一端称为“队尾”,允许删除的一端称为“队头”。如上图。

3.常用栈的结构代码:

//定义结构体
typedef struct{
    SElemType *base;
    SElemType *top;
    int stacksize;
}Sqstack;
Status InitStack(Sqstack &S)
{//构造一个空栈S
    S.base = new SElemType[MAXSIZE];
    if(!S.base) exit(OVERFLOW);//存储分配失败
    S.top = S.base;//top初始为base,空栈 
    S.stacksize =  MAXSIZE;
    return OK;

}
//入栈:
Status Push(Sqstack &S,SElemType e)
{//插入元素e为新的栈顶元素 
    if(S.top-S.base=S.stacksize) return ERROR;//栈满 
    *S.top++=e;//元素e压入栈顶,栈顶指针+1 
    return OK; 
}
//出栈
Status Pop(Sqstack &S,SElemType e)
{//删除S的栈顶元素,用e返回其值 
      if(S.top == S.base) return ERROR;//栈空 
      e = *--S.top;
      return OK;
} 

二、完成作业实践的心得体会。

在慕课上看到老师的“带你打代码”——括号匹配,在步步跟着打的过程中,学习到了几种与栈相关的函数写法。有如下几种函数:

void InitStack(Sqstack &S);//初始化 
void Push(Sqstack &S,char e);//将元素e入栈 
void Pop(Sqstack &S,char &e);//出栈一元素至e 
bool StackEmpty(Sqstack &S);//栈空 
bool stackFull(Sqstack S);//栈满 
bool Matching(string a);//对字符串a的括号进行匹配检查 

出现的问题:1.在遍历函数——Matching中,不小心加了cin >> ch,使得函数跑不了。2.初始化函数的形参S没有用引用符号。

三、向大家分享的资料:《大话数据结构》第四章:栈与队列

推荐理由:有多种案例实现包括源代码,有助于基础比较一般的同学共同学习巩固,方便理解与应用得更好。


四、目标

上一阶段目标完成情况:在课上问答中不懂的地方会仔细听老师的语音讲解,在慕课视频上也有努力跟学了几份代码,只是在课后拓展方面有待提高,在课程进度上还是有些跟不上。

接下来的目标:在学习时不急不躁,充分理解概念为先,之后多多的实践练习敲代码也是必需的,同时课堂上不懂的随时提问,课后也可自行在网上搜索更好的解答。

原文地址:https://www.cnblogs.com/heyi-777/p/12765880.html