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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

先看問題描述:

給定一系列正整數,請設計一個盡可能高效的算法,查找倒數第K個位置上的數字。

輸入格式:

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

輸出格式:

輸出倒數第K個位置上的數據。如果這個位置不存在,輸出錯誤信息NULL。

輸入樣例:

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

輸出樣例:

7

第一步:讀題,找關鍵詞,并摘取。

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

第二步:分析思路:

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

第三步:代碼:
#include <iostream> #include <cstdio> #include <list>using namespace std ;int main() {list <int> l ;int n ; //倒數第n項 cin >> n ;int x ; //輸入的值 int num = 0 ; //計數器 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 ;}

總結:比較水, 但是可裝13 優化的地方很多,比如我們很難想到用advance()這個函數去代替循環。再或者用num計數器代替 size()也可以省下很多時間。

附錄:list容器的用法:

常用聲明方法: list L ;

1.賦值:L.assign()
2.判定是否為空:L.empty() 空為1
3.計算大小:L.size() //目前存儲的空間
L.max_size() // 容器的最大容量 (容器也有大小,不是無窮的 比long long 小)
4.排序:sort() 對整型,浮點型,字符型進行排序 (升序) 還可以對結構體,容器排序。
壓入元素: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:因為list迭代器不像vector迭代器那樣靈活(因為二者存儲方式不同),因此用iterator中的advance函數: advance(it,5) :則輸出第六個函數

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。