标签:
设计思路:建立一个数组储存数据,用指针建立一个双向链,用一个循环一次输出第一数组到链中,如果输出的数和储存在链中的最后一个数相同则存入链中,如果不同,链中消去一个数,如果链中没数了,则存入链中。直到循环完成。输出链中的第一个数。
代码实现:
#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不能消,但是累计相消的话,就可以。
标签:
原文地址:http://www.cnblogs.com/zuhaoran/p/5535369.html