資料結構學習筆記(二)
一、棧
棧是一種操作受限的資料結構,只支援入棧和出棧操作。後進先出(LIFO)是它的最大的特點。棧既可以通過陣列實現,也可以通過連結串列實現。不管基於陣列還是連結串列,入棧、出棧的時間複雜度都為O(1)。
二、佇列
佇列最大的特點是先進先出,主要的兩個操作是入隊和出隊。更棧一樣,它既可以用陣列來實現,也可以用連結串列拉實現。用陣列實現的較順序佇列,用連結串列實現的叫鏈式佇列。用陣列實現佇列的時候,會有資料搬移操作,要想解決資料搬移問題,就需要使用迴圈佇列。
三、無鎖併發佇列的實現
無鎖是一種樂觀的策略,它會假設對資源的訪問時沒有衝突的。無鎖策略使用一種比較交換的技術(CAS)來鑑別執行緒是否發生衝突,一旦檢測到衝突發生,就重試當前操作直到沒有衝突為止。
無鎖的好處:
- 在高併發的情況下,它比有鎖的程式擁有更好的效能。
- 它天生是死鎖免疫的。
相關推薦
資料結構學習筆記(二)
一、棧 棧是一種操作受限的資料結構,只支援入棧和出棧操作。後進先出(LIFO)是它的最大的特點。棧既可以通過陣列實現,也可以通過連結串列實現。不管基於陣列還是連結串列,入棧、出棧的時間複雜度都為O(1)。 二
資料結構學習筆記(二)---求階乘(遞迴與非遞迴)
求100!的階乘 遞迴演算法: #include <stdio.h> long f(long n) { if(1 == n) return 1; else return f(
數據結構學習筆記(二) 線性表的順序存儲和鏈式存儲
出錯 初始化 node != test span 輸入 des val 線性表:由同類型數據元素構成有序序列的線性結構 --》表中元素的個數稱為線性表的長度 --》沒有元素時,成為空表 --》表起始位置稱表頭,表結束位置稱表尾 順序存儲: 1 package
大資料Hadoop學習筆記(二)
Single Node Setup 官網地址 1. 本地模式 2.偽分散式模式 ************************* 本地模式 **************************** . grep input output ‘dfs[a-
資料結構學習筆記(一)
一.陣列 陣列用一塊連續的記憶體空間,來儲存形同型別的一組資料,最大的特點就是支援隨機訪問,但插入,刪除操作也因此變得比較低效(為了保持記憶體資料的連續性),平均情況時間複雜度為O(n)。在平時的業務開發中,我們
資料結構學習筆記(18)---B樹
(1)什麼是B樹,其實有一個另外的名字叫B-樹,所以網上說的B-樹其實就是B樹。 B樹的定義: (1) 首先B樹是一棵平衡的m路查詢樹,樹中每個節點的最多有m個子樹。 (2) 根節點最少有兩個子樹。 (3) 除根節點以外的非葉子結點最少有[m/2]個子樹
資料結構學習筆記(一)基礎概念
1、資料(Data)和 資料是外部世界資訊的載體,是描述客觀事物的符號,它能夠被計算機識別、儲存和加工處理,是計算機程式加工的原料。計算機程式處理各種各樣的資料,可以是數值資料,如整數、實數或複數;也可以是非數值資料,如字元、文字、圖形、影象、聲音等。 2、
資料結構學習筆記(四) 圖之鄰接表實現深度優先遍歷
一下是使用鄰接表儲存表示,實現圖的深度優先遍歷的示例。 用於遍歷的有向圖如下: #include<iostream> #define MaxVertexNum 6 using namespace std; //抽象資料型別 typedef c
嚴蔚敏版資料結構學習筆記(4):佇列
和上次的棧相反,佇列是一種先進獻出的線性表(FIFO);它只允許在它的一端進行刪除操作,而在另一邊進行插入操作。在佇列裡面,允許插入的一端我們稱之為隊尾,允許刪除的一端稱為隊頭; 佇列和棧的基本操作差不多,也有八個,不同的一點是刪除操作是在表的頭部進行而不
嚴蔚敏版資料結構學習筆記(3):棧
棧是隻能在表尾進行插入和刪除的一種簡單一點的線性表。表尾端是棧頂(top),表頭端是棧底(bottom),不含元素的稱為空棧。因為我們只能對棧頂的元素進行插入和刪除操作,所以棧這個資料結構就是一個很有”原則”的結構,棧的修改是按照後進先出的原則進行的,也就是LI
資料結構 學習筆記(三):線性結構:堆疊,佇列,表示式求值,多項式加法運算
前言 2.2 堆疊 2.2.1 什麼是堆疊 計算機如何進行表示式求值? 【例】算術表示式5+6/2-3*4。正確理解: 5+6/2-3*4=5+3-3*4=8-3*4=8-12=-4 由兩類物件構成的: 運算數,如2、3、4 運算子號
資料結構學習筆記(1):Maximum Subsequence Sum最大子列和
問題思路分析:就是課堂上所講過的最大子列和問題,不過需要輸出子列頭和尾的項根據網上的資料,摹寫程式碼為具體實現:#include<iostream> using namespace std; int main (){ int N ; cin >>
資料結構學習筆記(20)---圖的應用(生成樹與最小生成樹)
上一篇部落格寫了圖的基本儲存於遍歷,在此基礎上,此篇部落格將會介紹圖的主要應用—–生成樹與最小生成樹。 (一)生成樹 定義:我總感覺書上定義比較繁瑣,因此就自己簡單定義了一下(可能不對哦),生成樹其實就是:對於一棵樹G,若頂點數為n,則在原來圖的基礎上把
嚴蔚敏版資料結構學習筆記(5):串
串(string),由字面意思理解就知道是和字串有關的一種資料結構,它是由零個或者多個字元組成的有限序列,一般記為 s = ‘a1a2a3……an’(n>=0); 其中s為串名,用單引號括起來的字元序列是串的值,ai可以是字母,數字,或者是其他字元;
《資料結構與演算法 python語言描述》學習筆記(二)————抽象資料型別和Python類
第一部分:學習內容概要 抽象資料型別 Python的類 第二部分:學習筆記 抽象資料型別 1.抽象資料型別(Abstract Data Type,ADT),通過一套介面闡述說明這一程式部分的可用功能,但不不限制功能的實現方法。 2.抽象資料型
Golang學習筆記(二)資料型別
Go的資料型別與Java等語言的資料型別幾乎一致 //byte其實就是uint8的別名 var aaa byte = 100 // rune其實就是int32的別名 var bbb rune = 200 //可以給一個字元,計算ascll碼 var ddd byte = 'a' var c
Java中未給定初始值的基礎資料型別為什麼不能輸出 ——Thinking in Java學習筆記(二)
在java程式設計思想第二章節中有這麼一個練習題:定義一個類,給定兩個無初始值的int和char型別的數值,輸出兩個數的值,驗證int和char的初始值。 我第一次是這麼做的: public static void main(String[] args) { int i; char
java設計模式學習筆記(二)--- 結構型模式
文章目錄 介面卡模式 組合模式 裝飾模式 代理模式 什麼時候使用代理模式 享元模式 外觀模式(門面模式) 橋樑模式 介面卡模式 介面卡是一個介面轉換器,用於在接收不同的輸入時,得到一致
學習筆記(二)tidyverse之readxl包------表格資料讀取
1、readxl概況 readxl包是tidyverse中的一員,是匯入Excel表格資料的一個R包,由Hadley Wickham開發的。與其他已經存在的包(例如:gdata包、xlsx包…)最大的區別是不依賴其他外部程式,能夠在所有作業系統中都方便使用; 主要功能是匯入
C++學習筆記(二):開啟檔案、讀取資料、資料定位與資料寫入
1.開啟二進位制檔案(fopen)、讀取資料(fread),應用示例如下: FILE *fp = fopen("data.yuv", "rb+"); //開啟當前目錄中的data.yuv檔案 char *buffer = ( char*) malloc (sizeof(char)*FrameSi