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...