第10章_线性数据结构.ppt.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章_线性数据结构.ppt

int main(int argc, char* argv[]) { std::string test_buffer[7] = {(){}[], ({[]}), ([)]{}, (()[{}]), {[((()))]([])},(((,((())))}; //测试 for (int i=0; i7; i++) { std::coutThe string is : test_buffer[i] , The result is (judge_bracket(test_buffer[i])?true:false) .std::endl; } return 0; } * 运行结果 The string is : (){}[], The result is true. The string is : ({[]}), The result is true. The string is : ([)]{}, The result is false. The string is : (()[{}]), The result is true. The string is : {[((()))]([])}, The result is true. The string is : (((, The result is false. The string is : ((()))), The result is false. * 荷兰国旗问题 【例10-4】现在我们面前有一张桌子,桌子上整齐的摆放着红色,白色,蓝色三种线条,但他们的顺序是凌乱的。我们的要求是:用一个算法把这些线条挑出来重新摆放顺序,最后的结果就像上图的荷兰国旗,红色在上,白色在中间,蓝色在最下面。 * 最直接的想法 声明一个变量flag来标识我们当前的需要摆放的位置。然后借助这个变量需遍历整个数组,首先找红色的线条(红白蓝线条我们可以用0,1,2模拟),找到就把它和当前位置的线条进行交换。当红色线条找全时就开始找白色线条,白色线条找完之后,剩下的肯定就是蓝色的线条了。到此整个的算法结束。 * 声明一个变量flag来标识我们当前的需要摆放的位置。然后借助这个变量需遍历整个数组,首先找红色的线条(红白蓝线条我们可以用0,1,2模拟),找到就把它和当前位置的线条进行交换。当红色线条找全时就开始找白色线条,白色线条找完之后,剩下的肯定就是蓝色的线条了。 * int flag = 0; //标识 while (flag red_white) //red_white 红白分隔线位置 { if (a[flag] != 0) { for (int i = flag+1; i array_size; i++) { if (a[i] == 0) { swap(a[flag],a[i]); break; } } } ++flag; } * while (flag = red_white flag white_blue) //white_blue 白蓝分隔线位置 { if (a[flag] != 1) { for (int i = flag+1; i array_size; i++) //array_size 数组大小 { if (a[i] == 1) { swap(a[flag],a[i]); break; } } } ++flag; } * 第一次改进 首先将整个数组分为3个区域,即红色区域,白色区域,蓝色区域,然后首先我们遍历红色区域判断当前单元的值是否是红色,若是继续遍历,否则判断该值是白色还是蓝色,若是白色便去白色区域去寻找一个红色的单元与之交换,反之便去蓝色区域寻找一个值与之交换。当红色区域遍历完成之后,我们接着遍历白色区域,若当前单元不是白色,那肯定是蓝色了,我们便去蓝色的区域去寻找一个值与之交换。当蓝色区域遍历完成之后。我们的工作就完成了。 * int flag = 0; //标识 while (flag red_white) //red_white 红白分隔线位置 { if (a[flag] == 1) { for (int i = red_white; i white_blue; ++i) { if (a[i] == 0)

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档