1. 程式人生 > >福州第三天——資料結構(一)

福州第三天——資料結構(一)

    第三天了,我們學了程式設計的最基礎之一——資料結構。一個程式由兩部分組成(引用山猹老師的話),其中有一部分就是難懂的演算法,另一種就是噁心的資料結構。所以說,資料結構也是OI中非常重要的一塊。我們平常所學的,大多數都是演算法。當然,演算法是我們一生都要學習的,所謂新的OI,不變的演算法。(不小心 跑歪了)。

    今天就來講一下資料結構吧!資料結構嘛,很噁心的東西。也許是因為我不是非常明白吧,一看到資料結構就感到頭暈。並且平時我也接觸的比較少(除了棧和佇列,這兩個東西我暫時運用的是最多的了,因為深搜和廣搜都要用,怎麼能不會呢!還不被打死!)直接進入專題吧!

    連結串列:

    連結串列啊,表啊,啊,是非常重要的一塊,也是非常實用,實現非常簡單的一塊。這也是儲存資料的一種方式。在之前,我們已經學習了陣列,這也是用來儲存資料的。但是,兩者有什麼不同呢?(當然是名字不同)

兩者最大的不同在於陣列是有指定的序列的,而連結串列並沒有天然的序列。比如:我們當前知道陣列a[2]的前面那一個一定是a[1],它的後面那一個一定是a[3]。但是,連結串列並沒有這樣的順序。所以,我們必須手動開陣列來幫連結串列記錄連結串列前一項是什麼,後一項是什麼。乍一看就感覺非常麻煩,其實真的非常麻煩。於是,連結串列的好處就出來了——插入和刪除操作非常容易實現。因為陣列插入一個數,需要把後面每一個數據都往後移,而連結串列可以直接插入,只需要把前面的那一個數接下去的位置改成插入的頭,把後一個數的頭接插入的數的尾,就能實現了。大大的降低了時間複雜度,瞬間變成O(1)。

    其實實現起來並沒有那麼難,只需要短短的幾行就夠了,寫個虛擬碼吧(上課記的)

插入:

[Code]
...//遍歷找到a,假如a,x,c的下標為pa,px,pc
next[px]=next[pa];
next[pa]=px;

刪除:

[Code]
...
next[pa]=next[px];
next[px]=0;
    當然,我們還有一種熟悉的鄰接表,這是我們圖論中經常要使用的,在這裡就不在展開了。

     棧:

    這個就不用多說了吧,就是一種先進後出的線性結構。我們常用top來記錄棧頂元素,每一次進棧top++,出棧top--。當棧為空時,top顯然等於0,所以說我們可以這樣來判斷棧是否為空。

佇列:

佇列也是一種線性的資料結構,它與棧的區別在於,它是先進先出的。我們可以用head和tail來記錄隊列當前的狀態。進佇列時,tail++,出佇列時,head++。當head==tail是,我們就可以判斷當前佇列所有元素都已經出隊列了。但是,我們不難發現,佇列是非常消耗空間複雜度的,因為每一次出佇列後,佇列前面就沒有用了。因此,我們可以運用迴圈佇列。但是最重要的是,我現在還不會=_=,這裡就不細講了。

雜湊(Hash)

雜湊我自認為是一個非常腦殘的東西,我都不知道為什麼這麼小的一件事情都要用一個名字來命名。雜湊只要是為了方便,當我們不能用太大的陣列下標或字串下標時,我們可以用雜湊來壓縮一下(其實就是模一個大質數,只要運氣好,你就可以為所欲為),感覺給程式碼很無聊。

    資料結構這種東西啊,我真的不是很擅長,甚至可以說是我的一個弱項(雖然說,我並不知道我的強項是什麼),只能加把力努力掌握了。

相關推薦

福州——資料結構

    第三天了,我們學了程式設計的最基礎之一——資料結構。一個程式由兩部分組成(引用山楂猹老師的話),其中有一部分就是難懂的演算法,另一種就是噁心的資料結構。所以說,資料結構也是OI中非常重要的一塊。我們平常所學的,大多數都是演算法。當然,演算法是我們一生都要學習的,所謂

章選擇結構

一、boolean 型別: 值只有兩個:true(真)和false(假) 二、常用的關係符: > < >= <= != == 作用:用來比較運算結果,值是boolean型別。. 三、if選擇結構的語法: if(boolean){ 程式碼塊 } 含義:如果boole

JavaScript 資料結構: 連結串列

前言 從實用性角度來說,連結串列對Javascript 來說沒有任何價值,為什麼呢? 我們先了解連結串列的特性,這個特性我們放在c++前提下來說,因為 這個特性是 根據 記憶體特性 來闡述的,Javascript 不存在記憶體操作,所有資料型別,本質性繼承Object 物件,而Ob

資料結構:什麼是資料結構

一、什麼是資料結構 1、資料結構的定義 資料:從計算機的角度來看,資料是所有能被輸入到計算機中且能被計算機處理的符號的集合。它是計算機操作的物件的總稱,也是計算機處理資訊的某種特定的符號表示形式(二進位制碼的抽象表示?)。 資料元素:資料元素是資料中的一個個體

大話資料結構——線性表順序儲存結構的java實現

    在看《大話資料結構》的時候,裡面詼諧的語言和講解吸引了我,但是這本書是用C來實現的,但是作為一個手擼java的人就想著用java來實現一下這些資料結構,於是就有了這些大話資料結構之java實現。哈哈,感覺這樣會讓自己的理解加深不少。 &n

再談資料結構:棧和佇列

1 - 前言 棧和佇列是兩種非常常用的兩種資料結構,它們的邏輯結構是線性的,儲存結構有順序儲存和鏈式儲存。在平時的學習中,感覺雖然棧和佇列的概念十分容易理解,但是對於這兩種資料結構的靈活運用及程式碼實現還是比較生疏。需要結合實際問題來熟練佇列和棧的操作。 2 - 例題分析 2.1

資料結構ArrayList原始碼分析

一、相關特性: 1、關係圖: 2、特點: * 元素所佔儲存空間是連續的 * 基於陣列實現,容量可自增 * 可通過角標獲取指定位置的元素 * 查詢快(基於陣列索引),增刪慢(涉及到陣列複製、移動和擴容) 二、建構函式和變數: 1、變數: public

自己動手實現java資料結構 向量

1.向量介紹   計算機程式主要執行在記憶體中,而記憶體在邏輯上可以被看做是連續的地址。為了充分利用這一特性,在主流的程式語言中都存在一種底層的被稱為陣列(Array)的資料結構與之對應。在使用陣列時需要事先宣告固定的大小以便程式在執行時為其開闢記憶體空間;陣列通過下標值計算出地址偏移量來對內部元素進行訪問

Java資料結構——連結串列

Java中的資料結構又很多種,如棧,佇列,樹等,但是他們的形式歸根到底就是兩種:一個是陣列,一個是連結串列,所有的結構都是對這兩個的變形。 什麼是線性表? 陣列和連結串列都屬於是線性表,那什麼是線性表:一個線性表是n個相同特性的資料元素的有序序列。各元素之間是一對一的關係。但這並不是

資料結構:順序表的基本操作 C語言

順序表   標頭檔案: Sqlist.h #include<stdio.h> #include<stdlib.h> #define SIZE 15 #pragma once typedef struct Sqlist { int elem[SIZ

2018.9.14資料結構氣泡排序

/****************************************************   @Title: 資料結構實驗   @Name: <實驗1-1> 起泡排序   @Object:      [實驗目的]         把起泡排序的演算

資料結構之順序表與連結串列

順序表 運用陣列結構來構建的線性表就是順序表。 本例實現了順序表的列印、清空、判斷是否為空、求表長、獲得指定下標的元素、獲得指定元素的下標、插入和刪除操作。 #include<iostream> const int MAXSIZE=100; using

資料結構線性表

特徵性質   線性結構 (1)唯一一個第一,唯一一個最後 (2)除第一個外均有唯一後繼,除最後一個均有唯一前驅 分為: 順序儲存線性表 優點 查詢快       缺點 插入刪除慢  可以陣列實現   資料的擴容  動態陣列 無序陣列的應用: 排序 氣泡

重溫資料結構

暑假來臨,應該是最後一個暑假了,找了家公司實習,公司對實習生的要求不高,工作量也少,抽空來溫習一下資料結構吧。這次看的是《大話資料結構》,感覺作者寫作風格有趣,讓我感覺很有興趣去看。如果需要的話可以從我的網盤下載,下面附上網盤連結。連結:http://pan.baidu.com/s/1s

java資料結構----------順序表操作例項

import java.util.Scanner; class DATA{//資料類 String key; // 節點的關鍵字 String name; String age; } class SLType{// 定義順序表的結構陣列 static fina

讀書筆記 |《資料結構》 之什麼是資料結構

剛好最近又找出大二修的資料結構的書,就想著把讀書筆記po上來。 資料結構是什麼 資料結構+演算法=程式 過程解析:發現問題,分析問題並抽象出具體的資料模型(待處理的資料以及資料之間的關係,即資料結構);設計演算法,其中包括完成資料表示(將資料以及資

資料結構——資料結構初識及演算法複雜度介紹

    資料結構,毋庸置疑,在程式設計中是極其重要的存在,在電腦科學中,不只是一般程式設計的基礎,而且是設計和實現編譯程式、作業系統、資料庫系統及其他系統程式和大型應用程式的重要基礎。     因此,CSDN的第一篇文章就選擇了資料結構(也是打算再次補習可

資料結構-----二叉樹

  一、二叉樹簡介 1、二叉樹簡介 二叉樹是由n(n>=0)個結點組成的有序集合,集合或者為空,或者是由一個根節點加上兩棵分別稱為左子樹和右子樹的、互不相交的二叉樹組成。     性質一:對於任何一棵二叉樹T,若葉子節點數為n0,度數

資料結構之連結串列篇

連結串列篇 #include<stdio.h>//P77例三 int ReversDouble(LinkList L) { int n=1; LinkList pre,p,q; pre=L; p1=L->next; p=L->next; wh

資料結構 時間複雜度

資料結構馬上就要考試了,抓緊複習下,聽說資料結構對於這一行業來說挺重要的,所以就把複習的歷程記錄下來,以備後用(順便裝個X)。 1.試分析下面各程式段的時間複雜度。 (1)x=90; y=100; while(y>0) if(