DS 遞迴和vector學習

2021-09-29 03:02:36 字數 3301 閱讀 4231

今天第二次限時上機?

卡了半小時的點竟然是head前沒有+變數(num.head)

head是類的成員啊!!!

第二題還是用了遍歷,要學習一下優化的演算法

去頭+再置尾操作

有n個數(1~n)按順序組成的序列,當至少還剩兩個數時進行以下操作:把第乙個數從序列中去掉,然後把新的第乙個數放到序列的末尾。當剩下最後乙個數時也從序列中去掉。

輸入n,輸出每次去掉的數。其中,n的值不超過50

輸入:7

輸出:1 3 5 7 4 2 6

#include

using namespace std;

template

class list;

template

class linknode

linknode

(const type &value)

; private:

type data;

linknode

*next;};

template

class list

; bool insert

(type element)

;void

show()

;void

showafter()

; bool neighbourexchange()

;void

move()

;void

change

(int k,

int n,list num);}

;//ππ『ï∫ø ˝

template

list::

list()

template

bool list::

insert

(type element)

linknode

*p=head;if(

!p)while

(p->next!=

null

) p=p->next;

p->next=newnode;

return true;

}template

void list::

show()

cout<}template

//把第乙個節點挪到最後的操作

void list::

move()

template

void list::

change

(int k,

int n,list num)

//實現函式

//列印刪掉的節點,刪除刪掉的節點,置尾操作,遞迴

if(k==n)

}int

main()

一開始有訪問空指標問題,記得判斷head==null情況

c++沒學過的我還是選擇了鍊錶?

然而室友說用vector只要20來行

所以我決定再學習一下vector

vector

vector==動態陣列,能存放各種資料型別

建立:vector< int> num; /vector< int >num(n);初始大小為n(佔位,之後加入的元素順接在後)

vector < int> num(n,a);初始大小為n,初始化所有值為a

vector < int> num(b); 用b初始化num

int n = ;

vector num(n, n+5) ;將陣列n的前5個元素作為向量的初值

vector num(&n[1], &n[4]) ;將n[1] - n[4]範圍內的元素作為向量a的初值

末尾加入:num.push_back(temp);

末尾刪除:num.pop_back();

清除:num.clear();

大小:num.size();

比較:a= =b 可直接比較相等

排序:sort(num.begin(),num.end());(需要#include< algorithm>)

sort是公升序的,需要降序就再reverse();

插入:num.insert(num.begin(), 10); 將10插入到向量的起始位置前

num.insert(num.begin(), 3, 10) ; 將10分別插入到向量元素位置的0-2處(共3個元素)

刪除:num.erase(num.begin()) ;將起始位置的元素刪除

num.erase(num.begin(), num.begin()+3) ;將(num.begin(), num.begin()+3)之間的元素刪除

取值:num.back();取最後乙個元素

num.front();取第乙個元素

反**num.reverse();

作為引數傳入時: double distance(vector&a, vector&b)&不要漏

大致先學習到這裡~

有合適的題目就用vector練習吧!!

加油加油?

與下乙個更大值的距離

給出一組數字,返回一串值,對應位置的數字表示與下乙個更大的數之間的位置間隔。如果之後都沒有更大的數,那麼該位置為0

數列的長度不超過30000,每個數的範圍在[0,100]之間(以空格隔開)

輸入: 73 74 75 71 69 72 76 73

輸出: 1 1 4 2 1 1 0 0

注:盡量不要使用暴力的方法

#include

using namespace std;

intmain()

cout<<

"input"

<" numbers:"

0;i)for

(i=0

;i) cout<<

"result:"

0;i) cout<<<

" ";

cout<}

嗯,來乙個遍歷的吧…

我好像也想不出優化版本了呢…(除了先記錄右邊是否是更大的數,是的話置1,不是就尋找,似乎也沒多優化…?)

先mark一下,下次聽助教分析啦!

希望下週的上機課能想好思路,更快完成任務哦~

星際2的DS和Shadow學習筆記。

最近,隨著外包告一段落,開始整理和重構gc了,順手整理一下gc的mrt。之前沒有認真讀完的星際2的 這次至少是把mrt部分和shadow部分讀了一下。先說mrt吧 星際2的mrt大約如下配置 半透明陰影確實能帶來很多真實感,效果看起來也很不錯。如果煙霧沒有投影,給人最深刻的感覺就是這些半透明的東西,...

vector 學習筆記

c 的標頭檔案是 include 沒有.h,而且還有加上命名空間using namespace std 主要演示vector的定義以及使用下標訪問,除了下標訪問,還有迭代器。include include using namespace std void main vectorivec for ve...

vector學習筆記

一 概述 1 集合中的每個物件都有乙個與之對應的索引,索引用於訪問物件。2 使用vector必須包含標頭檔案 include 3 vector能容納絕大多數的物件作為其元素,但是因為引用不是物件,所以不存在包含引用的vector。二 使用 1 定義 vectorivec vector file 2 ...