第三章学习小结
1.本章内容小结:
顺序栈:(栈顶指针指向最后一个元素的后一位置)
栈空:S.top==S.base 栈满:S.top-S>base==S.stacksize 入栈:*S.top++=e 出栈:e=--*S.top 取栈顶元素:return *(S.top-1)
typedef struct StackNode { char data[MAXSIZE]; int top;//标志栈顶 int stacksize; }SqStack;//顺序栈 typedef struct StackNode { SElemType *top;//栈顶指针 SElemType *base;//栈底指针 int stacksize; }SqStack;//顺序栈
链栈:(栈顶指针指向最后进的栈顶元素;最先进来的元素在最底部是栈尾元素,这个结点的指针域为空)
栈空:S==NULL 栈满:不用判断 入栈:p=new StackNode; p->data=e;p=>next=S;S=p;出栈:e=S->data;p=S;S=S->next;delate p; 取栈顶元素:return S->data;
typedef struct StackNode//与链表相似 { ElemType data; struct Stacknode *next; }StackNode, *LinkStack;
递归:(分而治之)if(递归结束条件)……;else function(更小的参数);
顺序队列(会假溢出)->循环队列:
队空:Q.front==Q.rear 队满(有m个空间,认为m-1个元素就是队满的情况下):(Q.rear+1)%MAXSIZE
入队Q.base[Q.rear]=e;Q.rear=(Q.rear+1)%MAXSIZE;//队尾指针加1; 出队:e=Q.base[Q.front];Q.front=(Q.front+1)%MAXSIZE; 求长度:(Q.rear-Q.front+MAX)%MAX;
typedef struct { QElemType *base;//存储空间的基地址 int front;//头指针 int rear;//尾指针 }SqQueue;
链队:(设置头结点(在队头元素前),队头指针指向头结点,队尾指针指向的是队尾元素)
队空:Q.front ==Q.rear 队满:不用判断 入队:p=new QNode;p->data=e;p->next=NULL;Q.rear->next=p;
出队:p=Q.front->next;e=p->data;Q.front->next=p->next;if(Q.rear==p) Q.rear=Q.front;//只有一个元素时,被删除了尾指针要回归;delete p;
typedef struct QNode { QElemType data; struct QNode *next; }QNode,*QueuePtr; typedef struct { QueuePtr front;//队头指针 QueuePtr rear;//队尾指针 }LinkQueue;
2.心得体会:有了第二章的基础,这章的学习就轻松点,但是又由于和第二章的知识有点接近,很容易串,所以就打算写出本章的基础方便以后查看。写实践题的时候是利用在第二次讨论的时候总结的经验,先写出框架再抠细节,这样写起来就比较顺利了,但是还是不能脱离课本独立完成代码。
3.上次目标的完成情况及下次目标:
上次目标的完成情况:上次学习第二章提到感觉被难倒了,在看带你打代码的时候会思考为什么要这样写以及简单尝试换一种写法会怎样,现在的情况算是有了一点好转,但是有时候还会有点模糊,还不够熟练;
下次目标:仍然要跟进度,写讨论的代码要更好才行。