1. 程式人生 > >陣列連結串列-----uva11988

陣列連結串列-----uva11988

下面是:有關連結串列的插入操作:

首先,插入的概念是:破壞兩個物體之間的聯絡,在兩個物體之間插入第三個物體。

例如:1------->2(1與2相連),我要在中間插入3,則要先破壞連結:1---x--->2,然後1---->3----->2。

下面以uva的11988為例說明:

#include<cstdio>
#include<cstring>
const int maxn = 100000 + 5;
int last, cur, next[maxn]; // 游標位於cur號字元之後面
char s[maxn];

int main() {
  while(scanf("%s", s+1) == 1) {
    int n = strlen(s+1); // 輸入儲存在s[1], s[2]...中
    last = cur = 0;
    next[0] = 0;

    for(int i = 1; i <= n; i++) {
      char ch = s[i];
      if(ch == '[') cur = 0;
      else if(ch == ']') cur = last;
      else {
       <span style="color:#ff0000;"> next[i] = next[cur];
        next[cur] = i;</span>
        if(cur == last) last = i; // 更新“最後一個字元”編號
        cur = i; // 移動游標
      }
    }
    for(int i = next[0]; i != 0; i = next[i])
      printf("%c", s[i]);
    printf("\n");
  }
  return 0;
}

這裡的next陣列是關係陣列,每一個next[i]記錄著它要指向哪一個字元的位置。

這裡詳細說明紅色字型的程式碼,這就是插入的概念。

兩句程式碼是(用最上面的例子說明):先然next[3]這個關係指向next[1]所指向的關係,也就是next[2],然後再讓next[1]指向next[3],從而讓關係重新建立。(這裡的程式碼有一個小技巧是:直接賦值,不需要再用一個變數儲存,程式碼簡潔)

這裡的關係next[]的值是指向字元的下標。

相關推薦

陣列連結串列-----uva11988

下面是:有關連結串列的插入操作: 首先,插入的概念是:破壞兩個物體之間的聯絡,在兩個物體之間插入第三個物體。 例如:1------->2(1與2相連),我要在中間插入3,則要先破壞連結:1---x--->2,然後1---->3----->2。

Leetcode88 21 合併倆個有序陣列、合併倆個有序連結串列陣列連結串列

1.合併倆個有序陣列 給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序陣列。 說明: 初始化 nums1 和 nums2 的元素數量分別為 m 和 n。 你可以假設 nums1 有足夠的空間(空間大小大於或等於

Java陣列連結串列ArrayList常用方法

什麼是ArrayList ArrayList是JDK自帶的基礎工具類 儲存路徑在:java.util.ArrayList 可以使用類似於陣列的索引 也可以使用連結串列的方式新增和刪除資料 ArrayList常用方法 增加元素到連結串列中 boolean add(Element

關於陣列/連結串列/棧/佇列的形象解釋

“棧”:       我是一個棧,先來跟你介紹一下我的家族,我的家族是一個很古老的家族,家族成員很多,外界稱呼我們這個家族為資料結構。我們是計算機世界中儲存和組織資料的。資料結構家族在計算機世界中是至關重要的,因為我們家族功能的強大,現代程式

PAT甲級 1074 Reversing Linked List (25 分)陣列連結串列

1074 Reversing Linked List (25 分) Given a constant K and a singly linked list L, you are supposed to reverse the links of every K element

leetcode 將已排序的 陣列/連結串列 轉換為二叉搜尋樹(BST),Python實現

思路:不論是陣列還是連結串列,遞迴地找到他的root(即序列的中點),並返回。 1. 將陣列轉換為二叉樹: # Definition for a binary tree node. # class T

15 API-集合(Collection(功能,迭代器),List(List特有迭代器,併發異常),常見資料結構圖示(棧,佇列,陣列,連結串列))&物件陣列

1:物件陣列(掌握) (1)陣列既可以儲存基本資料型別,也可以儲存引用型別。它儲存引用型別的時候的陣列就叫物件陣列。 (2)案例:用陣列儲存5個學生物件,並遍歷陣列。 學生的物件 public class Student { // 成員變數 private Stri

Java基礎練習-陣列連結串列排序

//題目:把學生連結串列按照學號從大到小排序 package Basic50; import java.util.ArrayList; public class ArraySort{ public static class Student//建立學生類(內部類) { public int xuehao;

HashMap-陣列+連結串列集合

field 常量 //預設初始化容量,最好為2的冪 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 //最大容量 static f

jdk1.8 HashMap 實現 陣列+連結串列/紅黑樹(預設桶中長度大於8時)

轉載至  http://www.cnblogs.com/leesf456/p/5242233.html 一、前言   在分析jdk1.8後的HashMap原始碼時,發現網上好多分析都是基於之前的jdk,而Java8的HashMap對之前做了較大的優化,其中最重要的一個優化就是

靜態連結串列——UVA11988(破損鍵盤)

開始刷資料結構相關的題了,在筆試和麵試過程中如果要寫出指標形式的連結串列時間上可能不夠。該題很好地訓練了怎麼使用陣列來模擬連結串列 破損的鍵盤(又名:悲劇文字)(Broken Keyboard(a.k.a. Beiju Text), UVa 11988) 你有一個破損的鍵

關於合併有序陣列/連結串列的總結

 通過最近的研究,發現好多公司在筆試和麵試中還是挺喜歡讓你寫一些合併類的程式。主要有合併兩個有序陣列和合並兩個有序單鏈表(可擴充套件考慮如何合併K個有序連結串列),本部落格中,對合並有序陣列和合並有序連

[BZOJ4516][Sdoi2016]生成魔咒(字尾陣列+連結串列||字尾自動機)

題目描述 傳送門 題解 題意實際上是求對於每一個字首本質不同的子串個數 那麼可以轉化為對於每一個字首只求包含最後一個點的和前面不重複的子串個數,然後將答案累加 把串反過來建字尾陣列 然後

java 陣列連結串列的巢狀使用(陣列連結串列--資料結構)

用處:連結串列陣列一般用於在不借用資料庫的情況下,對於大量資料的臨時儲存,來實現快速查詢的功能。 巢狀實現思想:上一篇中已經講了連結串列的建立和操作,借用上一篇中的部分來進行說明。上一篇中的類LinkList 是連結串列類,類中有對連結串列的各種操作,要把連結串列和陣列聯絡

[BZOJ4516][Sdoi2016]生成魔咒(字尾陣列+連結串列

題目 傳送門 題解 這道題還是比較好的; 要求出每一個字首本質不同的字尾的個數,那麼我們可以把原序列倒過來,然後實際上就是對於每一個字尾求與其它字尾不重複的字首個數,也即是字尾長度減去height值; 求出某一個字尾對答案的貢獻之後,他不應該停留在

演算法與資料結構-陣列/連結串列/堆/棧/佇列的儲存

序言 之前華為來交大宣講的時候,曾參加了一次現場交流,當時面試官給我出了一個三維資料儲存的問題,然後變著法的問如果要進行資料的怎樣怎樣變動需要使用什麼方式來儲存,由於當時對各種資料結構的儲存方式和特點掌握得不好沒能很順暢的回答,在這對各種資料結構的儲存方式做個

UVA11988 Broken Keyboard (a.k.a. Beiju Text)【陣列模擬連結串列

Broken Keyboard (a.k.a. Beiju Text) You're typing a long text with a broken keyboard. Well it's not

UVA11988(破損鍵盤) 使用陣列模擬連結串列插入

  開始刷資料結構相關的題了,在筆試和麵試過程中如果要寫出指標形式的連結串列時間上可能不夠。該題很好地訓練了怎麼使用陣列來模擬連結串列   破損的鍵盤(又名:悲劇文字)(Broken Keyboard(a.k.a. Beiju Text), UVa 1198

陣列連結串列和樹的演進

我們最常用的資料結構就是樹,最基礎的資料結構是陣列,那麼樹在陣列的基礎上解決了什麼問題?為什麼用樹而不用陣列?下面我們來詳細的剖析一下: 上面的圖是陣列、連結串列和樹的示意圖,可以看到,陣列中的元素沒有指標,單向連結串列有一個指標,雙向連結串列有兩個指標,它們都是表示的順序關係,也就是

九章演算法筆記 6.連結串列陣列 Linked List & Array

刷題注意事項 cs3k.com 每道題需要總結的 思路 演算法 核心程式碼 這個題得到的啟示!!!重點是bug free的能力   linked list理解 結果兩個都是 1 2 3 node是存在main函式裡的區域性變數, 還是全域性變數? 區