這題嘗試了兩種方法,一是書上說的用陣列來實現鍊錶相關操作,一種是利用指標形式的鍊錶實現
1.使用字元陣列c儲存一行中每個字元的值
2.使用陣列next儲存下乙個字元的位置,可以看成c[i]和next[i]共同構成鍊錶中的乙個結點(所以next[0],c[0]對應的是頭節點)
3.設當前字元的上個字元所在位置為cur初始值為0,當字元不是『[『和』]』時利用cur做普通的插入操作。當字元是『[『時,cur=0.當字元是『]』時,cur等於最後乙個字元編號last
4.最後輸出
#include
#include
using
namespace
std;
int main()
for (int i = 1; i <= len; i++)
else
if (c[i] == ']')
else
}for (int i = next[0]; i!=0; i=next[i])
cout
<< endl;
}system("pause");
return
0;}
要注意的是,當碰到『]』需要移動到文字結尾的時候,本來我是想通過遍歷當前鍊錶,找到最後乙個節點,並返回指標來實現的,不過發現似乎會超時。所以還是定義了乙個last節點,專門儲存最後乙個節點的值
#include
#include
using namespace std;
typedef struct linknode
}node;
class list
~list()
}node* returnhead()
node* returntail()
return p;
}node* insert(node *cur,node *needin)
void printlist()
}};int main()
else
if (input[i] == ']')
else
else}}
lista.printlist();
cout << endl;
}system("pause");
return
0;}
UVA 11988 鍊錶
之前遇到字典樹什麼的要不就用指標鍊錶,要不直接上list。陣列鍊錶主要思想和指標差不多。指標是用 next記錄下乙個的位址然後形成鏈。陣列本身開闢空間時便是乙個位址所以也可以達到這點。仔細分析一下陣列a的下標再不斷增大,但是記錄的資料卻在更新。所以可以大致寫出 int next 11 int now...
uva 11988 鍊錶 OR 塊狀鍊錶
鍊錶寫法 新增加乙個頭結點來使插入操作統一。1 include 2 include 3 include 4 using namespace std 56 const int n 100001 7 char text n 8char str n 9int next n 10int cur,last,b...
UVA 11988 悲劇文字 靜態鍊錶
你有乙個破損的鍵盤。鍵盤上的所有鍵都可以正常工作,但有時home鍵或者end鍵會自 動按下。你並不知道鍵盤存在這一問題,而是專心地打稿子,甚至連顯示器都沒開啟。當你 開啟顯示器之後,展現在你面前的是一段悲劇的文字。你的任務是在開啟顯示器之前計算出 這段悲劇文字。輸入包含多組資料。每組資料佔一行,包含...