線性表

線性表是“所有元素排成一行”的數(shù)據(jù)結(jié)構(gòu)滑进。除了第一個(gè)元素之外,所有元素都有一個(gè)“前一個(gè)元素”拴曲;除了最后一個(gè)元素外窗骑,所有元素都有“后一個(gè)元素”

環(huán)狀結(jié)構(gòu)也經(jīng)常轉(zhuǎn)化為線性結(jié)構(gòu)——只需要從某個(gè)元素處吧環(huán)切斷,就變成了鏈耳鸯。


隊(duì)列(queue/First In ,First out)例:

【卡片游戲】
桌上有一疊牌湿蛔,從第一張牌開始從上往下依次編號為1~n,當(dāng)至少還剩兩張牌是進(jìn)行以下操作:把第一張牌扔掉片拍,然后把新的第一張放到整疊牌的最后煌集。
輸入n妓肢,輸出每次扔掉的牌捌省,以及最后剩下的牌。
樣例輸入:7
樣例輸出:1 3 5 7 4 2 6

類似這個(gè)卡片游戲的結(jié)構(gòu)我們稱之為隊(duì)列碉钠,其特點(diǎn)是纲缓,先進(jìn)的元素先被移出隊(duì)列,后進(jìn)的元素后被移出隊(duì)列喊废。

C++提供一種STL隊(duì)列祝高,代碼如下
#include <cstdio>
#include <queue>
using namespace std;
queue <int> q;  //定義q為一個(gè)隊(duì)列類型,該隊(duì)列每個(gè)元素的類型為int
int main()
{
      int n;
      scanf("%d", &n);
      for (int i=0; i < n; i++)
            q.push(i+1);    //初始化隊(duì)列污筷,也就是每次循環(huán)在q隊(duì)列的末尾添加一個(gè)大小為(i+1)的int元素
      while (!q.empty())  //當(dāng)隊(duì)列q為空時(shí)返回值true工闺,所以當(dāng)q為空時(shí)退出循環(huán)
      {
            printf("%d ", q.front());    //打印首元素
            q.pop();                          //拋棄隊(duì)首元素
            q.push(q.front());            //吧隊(duì)首元素加入隊(duì)尾
            q.pop();                          //拋棄隊(duì)首元素
       }
      return 0;
}

棧(stack/Last In First Out)例:

【鐵軌問題】
假設(shè)有n節(jié)車廂,編號分別為1到n,它們隨機(jī)排序陆蟆,并從A駛?cè)雜tation雷厂,請問借助station是否可以按照n到1的編號重新排序整個(gè)車廂。

車廂可以在station中進(jìn)行的操作:
1叠殷、在A方向未進(jìn)station的車廂駛?cè)雜tation
2改鲫、在station內(nèi)的車廂向B方向駛出station

因?yàn)檩^早在station內(nèi)的車廂可能會(huì)受后面進(jìn)station的車廂妨礙,所以需要將后來進(jìn)的車廂駛出到B林束,或者返回到A(不如后來的車廂不要先進(jìn)站了)像棘,該較早入station的車廂才能向B方向駛出

車站模型
C++提供這種STL棧,代碼如下
#include <cstdio>
#include <stack>
using namespace std;
const int MAXN = 1000 + 10;
int n, target[MAXN];
int main()
{
      while(scanf("%d", &n)  == 1) 
      {
            stack<int> s;
            int A = 1, B = 1;
            for (int i=1; i <= n; i++)
                  scanf("%d", &target[i]);
            int ok=1;
            while (B <= n)
            {
                  if (A == target[B]) {A++; B++;}
                  else if (!s.empty() && s.top() == target[B]) { s.pop(); B++; }
                  else if (A <= n) s.push(A++);
                  else { ok = 0; break;}
            }
            printf("%s\n", ok ? "Yes" : "No");
      }
      return 0;
}

鏈表

鏈表是一種數(shù)據(jù)類型壶冒,它的特點(diǎn)是缕题,鏈表中的任何一個(gè)元素在記錄其本身值的同時(shí),記錄該元素的相鄰元素的地址(單向胖腾,雙向)
我們操縱一個(gè)線性表的數(shù)據(jù)時(shí)候避除,鏈表可以幫助我們快速在任一位置插入或刪除一個(gè)數(shù)(相比將整個(gè)列表的數(shù)后移一定位數(shù)然后插入值)。
但在鏈表中胸嘁,按順序查詢一個(gè)數(shù)的位置(地址/存放位置)通常要花費(fèi)大量時(shí)間瓶摆,如何優(yōu)化這一尋找過程便是一個(gè)難題

單向鏈表的倒序操作

以下抽象演示了鏈表結(jié)構(gòu)與操作

#include <cstdio>
#define LEN 10000
int num[LEN],left[LEN],right[LEN];
//我們將數(shù)組第一個(gè)元素作為空節(jié)點(diǎn),連接鏈表的第一個(gè)元素 
void link(int x,int y)  //將x,y兩個(gè)節(jié)點(diǎn)連接起來 
{
    right[x]=y;
    right[y]=x;
}
void add(int k,int position)  //這個(gè)是在(num中存放的第k個(gè)數(shù)在鏈表中的位置)上往后添加一個(gè)數(shù) 
{
    scanf("%d",&num[position]);
    int r=right[k];
    link(k,position);
    link(position,r);
}
void del(int k) //在鏈表中刪除num存放的第k個(gè)數(shù) 
{
    link(left[k],right[k]); //直接將該數(shù)在鏈表中的左右節(jié)點(diǎn)連接 
}
int find(int k)     //暴力查找鏈表中的第k個(gè)數(shù)在num中的位置(沒有優(yōu)化) 
{
    p=0;
    while (k--)
        p=right[p];
    return p;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末性宏,一起剝皮案震驚了整個(gè)濱河市群井,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毫胜,老刑警劉巖书斜,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異酵使,居然都是意外死亡荐吉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門口渔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來样屠,“玉大人,你說我怎么就攤上這事缺脉』居” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵攻礼,是天一觀的道長业踢。 經(jīng)常有香客問我,道長礁扮,這世上最難降的妖魔是什么知举? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任瞬沦,我火速辦了婚禮,結(jié)果婚禮上雇锡,老公的妹妹穿的比我還像新娘蛙埂。我一直安慰自己,他們只是感情好遮糖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布绣的。 她就那樣靜靜地躺著,像睡著了一般欲账。 火紅的嫁衣襯著肌膚如雪屡江。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天赛不,我揣著相機(jī)與錄音惩嘉,去河邊找鬼。 笑死踢故,一個(gè)胖子當(dāng)著我的面吹牛文黎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播殿较,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼耸峭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了淋纲?” 一聲冷哼從身側(cè)響起劳闹,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洽瞬,沒想到半個(gè)月后本涕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伙窃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年菩颖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片为障。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晦闰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出产场,到底是詐尸還是另有隱情鹅髓,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布京景,位于F島的核電站,受9級特大地震影響骗奖,放射性物質(zhì)發(fā)生泄漏确徙。R本人自食惡果不足惜醒串,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鄙皇。 院中可真熱鬧芜赌,春花似錦、人聲如沸伴逸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽错蝴。三九已至洲愤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顷锰,已是汗流浹背柬赐。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留官紫,地道東北人肛宋。 一個(gè)月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像束世,于是被迫代替她去往敵國和親酝陈。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 從數(shù)據(jù)的邏輯結(jié)構(gòu)來分毁涉,數(shù)據(jù)元素之間存在的關(guān)聯(lián)關(guān)系被稱為數(shù)據(jù)的邏輯結(jié)構(gòu)后添。歸納起來,應(yīng)用程序中的數(shù)據(jù)大致喲如下四種基本...
    Jack921閱讀 926評論 0 2
  • 轉(zhuǎn)自:http://blog.csdn.net/oreo_go/article/details/52116214 ...
    YYT1992閱讀 974評論 0 4
  • 一.線性表 定義:零個(gè)或者多個(gè)元素的有限序列薪丁。也就是說它得滿足以下幾個(gè)條件:??①該序列的數(shù)據(jù)元素是有限的遇西。??②...
    Geeks_Liu閱讀 2,697評論 1 12
  • 線性表是數(shù)據(jù)結(jié)構(gòu)中最簡單的基本數(shù)據(jù)結(jié)構(gòu)。線性表的使用和維護(hù)都很簡單严嗜,這一特點(diǎn)使其成為很多算法的基礎(chǔ)粱檀。數(shù)組、鏈表漫玄、棧...
    JunChow520閱讀 1,326評論 1 4
  • 在上一篇文章中我們簡單說了數(shù)據(jù)結(jié)構(gòu)的概念和數(shù)據(jù)結(jié)構(gòu)與算法的一些關(guān)系茄蚯,這一篇文章的內(nèi)容是關(guān)于線性表的東西,主要有線性...
    硅谷小蝦米閱讀 1,269評論 1 3