今天呢,换了个老师讲,大部分都听懂了,可能是内容比较简单的原因吧
首先,怎么学写程序:
程序(Programming)=数据结构(Data Structure)+算法(Algorithm)
链表:
没有天生前后顺序关系的“数组”,记录一个元素的后一个元素
[反向链表,双向链表,循环链表等]
特点:
1.数据存在数组里
2.对每一个数据要记录后一个元素的下标(可按需求记录前一个)
3.记录每一个链表的第一个元素的下标(可按需求记录最后一个)
遍历:
[code]
假设遍历链表10
for (i=first[10];i!=0;i=next[i])
cout<<d[i]<<endl;
插入元素:
1.找到要插入的前一个元素a;
2.把要插入的数据x对应的“后一个元素的下标”改为数据a对应的“后一个元素的下标”;
3.把数据a对应的“后一个元素的下标”改为要插入的元素的下标;
[code]
...通过遍历等方式找到a,假如a,x,c的下标为pa,px,pc。
next[px]=next[pa];
next[pa]=px;
删除元素:
1.找到要删除的数据前一数据a;
2.把数据a对应的"后一个元素的下标"改为要删除元素的“后一个元素的下标”
3.把要删除的数据x对应的“后一个元素的下标”改为空。
[code]
...通过遍历等方式找到a,假如a,x,c的下标为pa,px,pc。
next[pa]=next[px];
next[px]=0;
栈:“先进后出”数据存取
特点:
1.数据存在数组中,数组的大小即栈容量大小
2.用变量top记录栈顶元素
3.以数组形式存放一个栈(int s[MAXSIZE])
4.栈空时:top=0;
5.栈满是:top=MAXSIZE-1
6.top为栈顶元素的下标。通过访问s[top]取栈顶元素
将元素进栈,出栈:
1.访问当前栈顶元素:code{s[top];}
2.新元素入栈:code{++top;s[top]=x;}
3.栈顶元素出栈:code{top--;}
例题:表达式求值
Description:给定一个只含加法和乘法的算术表达式,求表达式的值。
Input:输入仅有一行,为需要你计算的表达式,表达式中只含数字、"+"和“*”,
且没有括号,所有参与运算的数字均为0到2的31次方-1之间的数。
Output:输出只有一行,表示这个表达式的值的后四位
注意:当答案长度多于4位时,请只输出表达式后四位
Limitamion:长度不超过10000.
Source:NOIP2013PJT2
思路:
显然,本题考查两方面:表达式运算处理和大数字运算
判断下一个将要处理的元素
若它是数字,则直接存入数字栈栈顶;
若它是符号,则将它于符号栈顶符号比较,若优先级大于栈顶符号,则直接压入符号栈,
若优先值小于或等于栈顶符号,则把符号栈栈顶元素取出,并取出数字栈栈顶两个数字运算,并把结果存回数字栈,重复上述过程直到新的符号优先级大于栈顶符号或栈空。
最终数字栈中保存的唯一数字,就是表达式运算结果。
好了,今天的博客先讲到这里,欲知后事如何,请看下篇!