小白打基礎系列 線性表的應用之大愛線性表

2021-10-07 08:48:07 字數 1658 閱讀 6858

2020資料結構課程設計之大愛線性表

大愛線性表

不少參賽同學剛學資料結構,對線性表最是熟悉不過。這裡我們給線性表增加兩個特殊的操作,第乙個是『r』 操作,表示逆轉整個表,如果表長為l,原來的第i個元素變成第l-i+1個元素。第二個操作是『d』,表示刪除表的第乙個元素,如果表為空,則返回乙個「error」資訊。我們可以給出一系列的『r』 和『d』組合,例如「rdd」表示先逆轉表,然後刪除最前面的兩個元素。

本題的任務是給定表和乙個操作串s,求出執行s後的表,如果中途出現『d』操作於空表,輸出「error」。

輸入

第一行是乙個整數,表示有多少組資料。每組測試資料格式如下:

(1)第一行是操作串s,有『r』 和『d』組成,s的長度大於0,不超過100 000。

(2)第二行是整數n,表示初始時表中的元素個數。n的值不小於0,不超過100 000。

(3) 第三行是包含n個元素的表,用『[』 和 『]』括起來,元素之間用逗號分開。各元素值在[1,100]之間。

解題思路:

1)對我而言,本題的難點在於如何正確處理輸入與輸出操作。所以在輸入輸出問題上要下功夫。

2)如何處理r與d呢?此解法用了兩個技巧,頭尾指標與計數器。頭尾指標k,q分別記錄陣列元素的位置。計數器記錄翻轉次數,如果翻轉次數模2為0,那麼相當於沒有翻轉。如果r一次,d一次,計數器模2為1,那麼q++,模擬元素被移出陣列。如果計數器模2為0,那麼k++。這樣操作!

下面是原始碼:

#include

#include

using

namespace std;

#define maxsize 100005

//利用陣列

typedef

struct

arry;

arry l;

char option[maxsize]

;//利用識別符號記錄翻轉次數,如果為偶數,那麼相當於沒翻轉

void

clean

(int len)

//清空

intmain()

else

cin >> h >> h;

for(i =

0; i < length_option; i++)

l.length--

;//陣列長度減小

if(count%2==

0)k++

;//頭指標移動位置

else

q++;//尾指標移動位置}}

if(flag==1)

else

if(flag==0)

}else

} cout <<

"]"<< endl;

}clean

(length_option)

; n--;}

return0;

}

常見錯誤:

1)輸出為空。元素錄入出了問題。

2)多餘逗號。格式控制出了問題。

3)應該正序輸出卻逆序輸出,而且少了數字。大概率!(count%2)寫成了!count%2這種形式,疏忽運算子優先順序導致的錯誤。

小白打基礎系列 排序演算法之插入 冒泡與快速排序

直接插入法是最簡單的排序法,其排序思想如下 打牌時,每抓一張牌就將其放到對應的順序位置。下面是待排記錄的型別定義 define maxsize 200 typedef int keytype 關鍵字型別 typedef struct redtype 記錄型別 typededf struct sqli...

線性表的應用

1 用順序表實現 include using namespace std define maxsize 100 typedef struct sqlist int initlist sqlist s void createlist sqlist s void listshow sqlist s ln...

線性表的系列操作

include include define maxsize 100 typedef int elementtype typedef struct lnode list 定義乙個線性表 struct lnode list l 建立乙個指向線性表的指標 list makeempty1 初始化線性表 i...