日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

7-4 求链式线性表的倒数第K项(最佳解法)(List容器)

發(fā)布時(shí)間:2024/2/28 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7-4 求链式线性表的倒数第K项(最佳解法)(List容器) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

先看問題描述:

給定一系列正整數(shù),請?jiān)O(shè)計(jì)一個(gè)盡可能高效的算法,查找倒數(shù)第K個(gè)位置上的數(shù)字。

輸入格式:

輸入首先給出一個(gè)正整數(shù)K,隨后是若干正整數(shù),最后以一個(gè)負(fù)整數(shù)表示結(jié)尾(該負(fù)數(shù)不算在序列內(nèi),不要處理)。

輸出格式:

輸出倒數(shù)第K個(gè)位置上的數(shù)據(jù)。如果這個(gè)位置不存在,輸出錯(cuò)誤信息NULL。

輸入樣例:

4 1 2 3 4 5 6 7 8 9 0 -1

輸出樣例:

7

第一步:讀題,找關(guān)鍵詞,并摘取。

題目大意不多說了哈,直接找關(guān)鍵詞。 關(guān)鍵詞:
1.高效的算法(不完美的手寫算法不可取,很可能超時(shí),當(dāng)然大佬自行略過)
2.以負(fù)整數(shù)表示結(jié)尾。
↑摘下眼鏡好好康康,是負(fù)整數(shù),不是-1哦。

第二步:分析思路:

學(xué)習(xí)過C++的STL庫的小伙伴都知道,C++已經(jīng)貼心的為我們封裝好了現(xiàn)成的雙向循環(huán)鏈表:list, 拿來直接用就好了。 (沒接觸過不要緊, 文章最下面有詳細(xì)的list教學(xué)。) .
首先,輸入數(shù)據(jù),壓入list, 第二步,判定K值,第三步,調(diào)用函數(shù)輸出。

第三步:代碼:
#include <iostream> #include <cstdio> #include <list>using namespace std ;int main() {list <int> l ;int n ; //倒數(shù)第n項(xiàng) cin >> n ;int x ; //輸入的值 int num = 0 ; //計(jì)數(shù)器 while ( scanf("%d",&x) && x >= 0 ) {l.push_back(x) ; num++ ; } //如果不存在 if( num < n ) {cout << "NULL" ; return 0 ;}list <int>::iterator it ;it = l.end() ;it-- ;advance(it,-(n-1)) ;cout << *it ;return 0 ;}

總結(jié):比較水, 但是可裝13 優(yōu)化的地方很多,比如我們很難想到用advance()這個(gè)函數(shù)去代替循環(huán)。再或者用num計(jì)數(shù)器代替 size()也可以省下很多時(shí)間。

附錄:list容器的用法:

常用聲明方法: list L ;

1.賦值:L.assign()
2.判定是否為空:L.empty() 空為1
3.計(jì)算大小:L.size() //目前存儲(chǔ)的空間
L.max_size() // 容器的最大容量 (容器也有大小,不是無窮的 比long long 小)
4.排序:sort() 對整型,浮點(diǎn)型,字符型進(jìn)行排序 (升序) 還可以對結(jié)構(gòu)體,容器排序。
壓入元素:L.push_back() ; L.push_front()
插入元素:L.insert(i,x) ; L.insert(i,n,x) L.insert(i,L.begin(),L.end())
刪除元素:L.pop_back() ; L.pop_front() L.erase(it) ;
特殊的1:移除元素:L.remove(x) ;
移除前:5 3 5 3 5
L.remove(3) ;
移除后:5 5 5
特殊的2:合并容器:L1.merge(L2) 把L2的所有值給L1 且升序排序

特殊的3:合并容器:L1.splice(L2) 把L2的所有值給L1 且不排序,只連接

特殊的4:因?yàn)閘ist迭代器不像vector迭代器那樣靈活(因?yàn)槎叽鎯?chǔ)方式不同),因此用iterator中的advance函數(shù): advance(it,5) :則輸出第六個(gè)函數(shù)

總結(jié)

以上是生活随笔為你收集整理的7-4 求链式线性表的倒数第K项(最佳解法)(List容器)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。