设计思路:建立一个数组储存数据,用指针建立一个双向链,用一个循环一次输出第一数组到链中,如果输出的数和储存在链中的最后一个数相同则存入链中,如果不同,链中消去一个数,如果链中没数了,则存入链中。直到循环完成。输出链中的第一个数。
代码实现:
#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不能消,但是累计相消的话,就可以。
日期任务 | 听课 | 编写程序 | 阅读课本 | 准备考试 | 日统计 | 日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 | 日期 | 编号 | 引入阶段 | 排除阶段 | 修复时间 | 描述 | ||||||
周一 | 100 | 100 | 5月9日 | 8:00 | 9:50 | 10m | 100m | 上课 | ||||||||||||||||
周二 | 5月10日 | |||||||||||||||||||||||
周三 | 5月11日 | |||||||||||||||||||||||
周四 | 5月12日 | |||||||||||||||||||||||
周五 | 2h | 2h | 5月13日 | 14:20 | 16:30 | 2h | 写博客 | |||||||||||||||||
周六 | 5月14日 | |||||||||||||||||||||||
周日 | 5月15日 | |||||||||||||||||||||||