码迷,mamicode.com
首页 > 其他好文 > 详细

课堂练习找水王02

时间:2016-05-27 18:36:29      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:

设计思路:建立一个数组储存数据,用指针建立一个双向链,用一个循环一次输出第一数组到链中,如果输出的数和储存在链中的最后一个数相同则存入链中,如果不同,链中消去一个数,如果链中没数了,则存入链中。直到循环完成。输出链中的第一个数。

代码实现:

技术分享
#include<iostream>
#include<string>
using namespace std;

int main()
{
    typedef struct list
    {
        string data;
        struct list *prior;
        struct list *next;

    }list, *llist;
    
    string a[100];
    llist l,p,r;
    l=new list;
    p = l;
    r = l;
    l->data = "";
    for (int i = 0; i < 100; i++)
    {
        a[i] = ‘a‘;
    }
    for (int i = 0; i < 10; i++)
    {
        a[i] = ‘b‘;
    }//设置测试数据
    for (int i = 1; i < 100; i++)
    {
        if (l->data == "")//如果链头为空,则插入数据
        {
            l->data = a[i];
            
        }
        else//链头不空
        {
            if (r->data == a[i])//链尾和输入的数据一样,把数据插入链
            {
                p = new list;
                p->data = a[i];
                r->next = p;
                p->prior = r;
                r = p;
            }
            else//输入数据不一样,
            {
                if (r == l)//若是链头,设为空
                {
                    l->data ="";
                    l->next = NULL;
                }
                else//删除链中的最后一个
                {
                    p = r->prior;
                    delete r;
                    r = p;
                }
            }
        }
    }
    cout <<"水王是"<< l->data<<endl;
}
技术分享

 

 

截图:

 技术分享

心得:

这个算法的雏形是老师说的两两相消,但是两两相消的话有些情况比如,a,a,b,b,a,a不能消,但是累计相消的话,就可以。

课堂练习找水王02

标签:

原文地址:http://www.cnblogs.com/zuhaoran/p/5535369.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!