破损的键盘(Broken KeyBoard)Uva 11988
来源:互联网 发布:php棋牌游戏源码 编辑:程序博客网 时间:2024/05/01 08:59
样例输入:[[]][][]Happy_Birthday_to_Tsinghua_University
样例输出:Happy_Birthday_to_Tsinghua_University
静态链表的实现:(用结构体数组模拟链表)
using namespace std;class StaticList{private:typedef struct stElem{char ch;int nNext;}Elem;private:const static int MAX_LEN = 1000;Elem Next[MAX_LEN];int cur;int last;public:StaticList(){ cur = last = 0; Next[0].ch = '#'; Next[0].nNext = -1; }int MoveFront();int MoveBack();void AddItem(char strNext, int nPos);char* GetString();};int StaticList :: MoveBack() {cur = last;}int StaticList :: MoveFront() {cur = 0;}char * StaticList :: GetString(){char *pStr = new char[MAX_LEN];int nPos = 0;for(int i = 0; Next[i].nNext != -1; i = Next[i].nNext)pStr[nPos++] = Next[i].ch;pStr[nPos] = '\0';return pStr;}void StaticList :: AddItem(char ch, int nNext){Next[nNext] = Next[cur];Next[cur].ch = ch;Next[cur].nNext = nNext;if(last == cur) last = nNext;cur = nNext;}int main(){char s[] = "This_is_a_[beiju]_text";//char s[] = "[[]][][]Happy_Birthday_to_Tsinghua_University";int len = sizeof(s)/sizeof(char);StaticList objList;for(int i = 0; i < len; ++i){if(s[i] == '[')objList.MoveFront();else if(s[i] == ']')objList.MoveBack();elseobjList.AddItem(s[i], i+1);}cout<< objList.GetString();}
动态链表的实现:
#include <iostream>#include <string>using namespace std;class DynamicList{private:typedef struct ST_Node{char word;struct ST_Node *pNext;}Node;void AllocHeadNode();private:Node *pHead;Node *pTail;Node *pCur;string strWord;public:const long MAX_LEN;DynamicList() : MAX_LEN(1024) { AllocHeadNode(); }DynamicList(long nMaxLen) : MAX_LEN(nMaxLen) { AllocHeadNode(); }//================string GetString();void AskAString();//================void AddItem(char ch);void Move2Head();void Move2Tail();};void DynamicList:: AllocHeadNode(){Node *pHeadNode = new Node;pHeadNode->word = '#';pHeadNode->pNext = NULL;pHead = pTail = pCur = pHeadNode; }void DynamicList:: Move2Head() { pCur = pHead; }void DynamicList:: Move2Tail() { pCur = pTail; }void DynamicList:: AddItem(char ch){Node *tmp = new Node;tmp->word = ch;tmp->pNext = pCur->pNext;pCur->pNext = tmp;if(pCur == pTail)pTail = pTail->pNext;pCur = pCur->pNext;}void DynamicList:: AskAString(){char a[MAX_LEN];int nPos = 0;for(Node *tmp = pHead->pNext;tmp != NULL; tmp = tmp->pNext)a[nPos++] = tmp->word;a[nPos] = '\0';strWord = a;}string DynamicList:: GetString() { return strWord; }int main(){char str[] = "This_is_a_[beiju]_text";//char str[] = "[[]][][]Happy_Birthday_to_Tsinghua_University";//DynamicList objList(1024);DynamicList objList;for(char *pos = str; *pos != '\0'; ++pos){if(*pos == '[')objList.Move2Head();else if(*pos == ']')objList.Move2Tail();elseobjList.AddItem(*pos);}objList.AskAString();cout<< objList.GetString() <<endl; return 0;}
个人小结:
以上使用的都是单向链表,因为题目有两个特点:(1)它处于建立链表的阶段,而不是链表建成之后,把里面的元素拆下来再插入到链表中;(2)它只涉及头尾的插入
所以用单向链表来实现。
0 0
- 破损的键盘(Broken KeyBoard)Uva 11988
- Broken Keyboard 破损键盘 UVA 11988
- UVA 11988 Broken Keyboard (a.k.a. Beiju Text)(破损的键盘(又名:悲剧的文本))(链表)
- 例题6-4 UVA 11988 Broken Keyboard (a.k.a. Beiju Text) 破损的键盘
- 例题6-4 破损的键盘(又名:悲剧文本)(Broken Keyboard(a.k.a. Beiju Text), UVa 11988)
- 链表-单向链表&&UVa 11988 Broken Keyboard(a.k.a.Beijiu Text)(破损的键盘(悲剧文本))的理解与解析
- uva 11988 破损的键盘(链表)
- 破损的键盘(uva 11988)
- UVa 11988破损的键盘
- UVA 11988 破损的键盘
- Uva 11988 Broken Keyboard
- UVa 11988 ------ Broken Keyboard
- uva 11988 Broken keyboard
- UVA 11988 Broken Keyboard(链表的使用)
- uva 11988 - Broken Keyboard (模拟)
- UVA 11988(p143)----Broken Keyboard
- UVA 11988 Broken Keyboard 链表
- UVA 11988 Broken Keyboard 【链表】
- Cordova探索之旅系列(三)
- Java基础知识点之函数和流程控制语句小结
- ubuntu 14.04 修改主机名
- 百度搜索:个人信用记录查询方法分享
- CSDN上看到的一篇有关Spring JDBC事务管理的文章(内容比较全)
- 破损的键盘(Broken KeyBoard)Uva 11988
- 程序书写过程中的一些小技巧
- 关于vs2010下.net4.0 C#代码的混淆--网上各种破解版混淆工具的使用记录
- mongo连接不上
- android WebView使用示例
- Spring中配置和读取多个Properties文件
- 串行&并行程序在效率上的简单比较
- 抓包工具抓取本机报文(wiresharke)
- 各种位运算