福州培训之数据结构[链表,栈](2月7日)

今天呢,换了个老师讲,大部分都听懂了,可能是内容比较简单的原因吧

首先,怎么学写程序:

程序(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

思路:

显然,本题考查两方面:表达式运算处理大数字运算

判断下一个将要处理的元素

若它是数字,则直接存入数字栈栈顶;

若它是符号,则将它于符号栈顶符号比较,若优先级大于栈顶符号,则直接压入符号栈,

若优先值小于或等于栈顶符号,则把符号栈栈顶元素取出,并取出数字栈栈顶两个数字运算,并把结果存回数字栈,重复上述过程直到新的符号优先级大于栈顶符号或栈空。

最终数字栈中保存的唯一数字,就是表达式运算结果。

好了,今天的博客先讲到这里,欲知后事如何,请看下篇!

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值