數組實現各類數據結構

目錄

一、數組實現單鏈表

二、數組實現雙鏈表

三、數組實現棧

四、數組模擬隊列

五、數組模擬單調棧

六、數組模擬單調隊列(滑動窗口)

七、數組模擬堆


一、數組實現單鏈表

#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;
const int N=1e5+10;
int e[N],ne[N],q,head,idx;
//e[i]表示結點i的值
//ne[i]表示結點i的next的指針是多少
//idx存儲當前已經用到了哪個點
void init()
{head=-1;idx=0;e[0]=0;ne[0]=0;
}
//將x插到head---插入操作
void add_to_head(int x)
{e[idx]=x,ne[idx]=head,head=idx,idx++;
}
//將x插到下標為k的點的后面
void add(int k,int x)
{e[idx]=x,ne[idx]=ne[k],ne[k]=idx,idx++;
}
//將下標是k的后面的點刪掉
void remove(int k)
{ne[k]=ne[ne[k]];
}
#if 0
int main(void)
{cin>>q;while(q--){int t;cin>>t;if(t==1){int x,int y;cin>>x>>y;}}return 0;
}
#endif

二、數組實現雙鏈表

#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;
const int N=1e5+10;
int l[N],r[N],e[N],head,idx;
int n,m;//初始化
void init()
{//0表示左端點 1表示右端點r[0]=1,l[1]=0;idx=2;
}
//在下標為k的右邊插入x
//如果要實現在下標為k的左邊插入x  直接調用add(l[k],x)
void add(int k,int x)
{e[idx]=x;r[idx]=r[k];l[idx]=k;l[r[k]]=idx;//這一步和下一步不可以顛倒r[k]=idx;
}
//刪除第k個點
void remove(int k)
{r[l[k]]=r[k];l[r[k]]=l[k];
}

三、數組實現棧

B3614 【模板】棧 - 洛谷

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e6+10;
#define int unsigned long long
int stk[N],tt;//tt表示棧頂下標
//1.插入一個元素:stk[++tt]=x;
//2.刪除一個元素:tt--;
//3.判斷棧是否為空:if(tt>0)
//4.棧頂元素:stk[tt];
signed main(void)
{int  t;cin>>t;while(t--){int n;cin>>n;tt=0;for(int i=1;i<=n;i++){string s;cin>>s;if(s=="push"){int x;cin>>x;stk[++tt]=x;}else if(s=="pop"){if(tt==0)cout<<"Empty"<<endl;else tt--;}else if(s=="query"){if(tt>0)cout<<stk[tt]<<endl;else cout<<"Anguei!"<<endl;}else if(s=="size"){cout<<tt<<endl;}}}return 0;
}

四、數組模擬隊列

B3616 【模板】隊列 - 洛谷

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e4+10;
int hh,tt=-1,q[N];//1.隊尾插入一個元素:q[++tt]=x;
//2.彈出:hh++
//3.判斷是否為空:if(hh<=tt)為空 else 非空
//4.取出隊頭元素:q[hh]
int main(void)
{int  t;cin>>t;while(t--){int opt;cin>>opt;if(opt==1){int x;cin>>x;q[++tt]=x;}else if(opt==2){if(hh>tt)cout<<"ERR_CANNOT_POP"<<endl;else hh++;}else if(opt==3){if(hh>tt)cout<<"ERR_CANNOT_QUERY"<<endl;else cout<<q[hh]<<endl;}else if(opt==4){cout<<tt-hh+1<<endl;}}return 0;
}

五、數組模擬單調棧

碼蹄集OJ-山脈

//求一段序列中的每個元素之前的第一個小于它的元素
#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;
const int N=3e6+10;
int n,stk[N],tt;
int main(void)
{cin>>n;for(int i=0;i<n;i++){int x;cin>>x;while(tt&&stk[tt]>=x)tt--;if(tt)cout<<stk[tt]<<" ";else cout<<1<<" ";stk[++tt]=x;}return 0;
}

六、數組模擬單調隊列(滑動窗口)

P1886 滑動窗口 /【模板】單調隊列 - 洛谷

#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;
const int N=1e6+10;
int q[N],a[N],n,k,tt=-1,hh=0;
int main(void)
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n>>k;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++){//判斷隊頭是否已經滑出窗口 如果沒滑出窗口 則hh++while(hh<=tt&&(i-k+1)>q[hh]){hh++;}//將隊列中的元素與第i個元素進行比較,如果隊列中的元素大于當前元素 則彈出while(hh<=tt&&a[q[tt]]>=a[i]){tt--;}q[++tt]=i;if(i>=k)cout<<a[q[hh]]<<" ";}cout<<endl;tt=-1,hh=0;for(int i=1;i<=n;i++){//判斷隊頭是否已經滑出窗口 如果沒滑出窗口 則hh++while(hh<=tt&&(i-k+1)>q[hh]){hh++;}//將隊列中的元素與第i個元素進行比較,如果隊列中的元素大于當前元素 則彈出while(hh<=tt&&a[q[tt]]<=a[i]){tt--;}q[++tt]=i;if(i>=k)cout<<a[q[hh]]<<" ";}return 0;
}

七、數組模擬堆

#include<iostream>
#include<algorithm>using namespace std;
const int N=1e6+10;int h[N],size;
void down(int u)
{int t=u;if(2*u<=size&&h[u*2]<h[t])t=u*2;if(u*2+1<=size&&h[u*2+1]<h[t])t=u*2+1;if(u!=t){swap(h[u],h[t]);down(t);}
}
void up(int u)
{while(u/2>0&&h[u/2]>h[u]){swap(h[u/2],h[u]);up(u/2);}
}
void insert(int x)
{size++; h[size]=x;up(size);
}
void remove()
{h[1]=h[size],size--;down(1),up(1);
}
int main(void)
{int n;cin>>n;while(n--){int op;cin>>op;if(op==1){int x;cin>>x;insert(x);}else if(op==2)cout<<h[1]<<endl;else {remove();}}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93859.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93859.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93859.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據處理與統計分析 —— apply自定義函數

目錄 一、向量化與偽向量化 1、向量化 2、np.vectorize 偽向量化&#xff08;特定場景&#xff09; 3、apply&#xff08;自定義函數&#xff09; 二、apply函數 1、對series中使用apply 2、對dataframe中使用apply 3、apply函數案例-泰坦尼克號數據集] 數據集下載鏈接&#xf…

如何有效利用大語言模型來智能加速產業聯盟的產業鏈轉化路徑?

觀點作者&#xff1a;科易網AI技術轉移研究院在科技創新浪潮席卷全球的今天&#xff0c;科技成果轉化已成為衡量一個國家創新能力的重要標志。然而&#xff0c;一項權威調查顯示&#xff0c;我國科技成果轉化率不足30%&#xff0c;大量有價值的創新成果仍停留在實驗室階段&…

視頻加水印 視頻加水印軟件 視頻加動態水印

如果你有一個視頻&#xff0c;你想給他加一個水印&#xff0c;那么你可以使用這個工具&#xff0c;準備好你的視頻和水印。水印一般采用PNG&#xff0c;打開這個工具&#xff0c;把你的視頻和水印拖進這個方框當中。視頻限制是MP4&#xff0c;水印限制是PNG&#xff0c;它可以把…

面向DeepSeek chat coding實錄(二)

向DeepSeek的提問 幫我設計以下兩個python class Span 屬性&#xff1a; hash值&#xff08;在init函數中通過時間初始化&#xff09; 創建時間&#xff1a;時間&#xff08;在init函數中通過時間初始化&#xff09; 結束時間&#xff1a;時間&#xff08;可選&#xff0c;默認…

Hi3516CV610-00S 海思SOC芯片 可申請開發資料

1.1 概述Hi3516CV610 是一顆應用在安防市場的 IPC SoC。在開放操作系統、新一代視頻編解碼標準、網絡安全和隱私保護、人工智能方面引領行業發展&#xff0c;主要面向室內外場景下的槍機、球機、半球機、海螺機、槍球一體機、雙目長短焦機等產品形態&#xff0c;打造極具競爭力…

算法題Day4

目錄 13. 練習13 : 整數十位 14. 練習14 : 時間轉換 15. 練習15 : 小雨的游泳時間 13. 練習13 : 整數十位 解題方法: #include <iostream> using namespace std; int a; int main() {cin >> a;cout << a % 100 / 10 << endl;return 0; } 14. 練習…

加速你的故障排查:使用 Elasticsearch 構建家電手冊的 RAG 應用

作者&#xff1a;來自 Elastic Alessandro Brofferio 學習如何使用 Elasticsearch 構建 RAG 應用&#xff0c;輕松排查你的家電問題。 想要獲得 Elastic 認證嗎&#xff1f;來看看下一次 Elasticsearch 工程師培訓什么時候開始吧&#xff01; Elasticsearch 擁有大量新功能&am…

6.Shell腳本修煉手冊---grep命令使用指南

grep 命令&#xff1a;從文本中精準篩選信息的實用指南 文章目錄grep 命令&#xff1a;從文本中精準篩選信息的實用指南一、什么是 grep&#xff1f;為什么要用它&#xff1f;二、grep 基本語法三、常用選項詳解&#xff08;附實例&#xff09;&#xff08;一&#xff09;模式選…

Python day51

浙大疏錦行 Python day51 復習日&#xff0c;DDPM class DenoiseDiffusion():def __init__(self, eps_model: nn.Module, n_steps: int, device: torch.device):super().__init__()self.eps_model eps_modelself.n_steps n_stepsself.device deviceself.beta torch.linsp…

數據結構:生成 (Generating) 一棵 AVL 樹

目錄 搭建“創世”的舞臺 注入序列&#xff0c;觀察演化 注入 10 注入 20 注入 30 注入 40 注入 50 注入 25 再次審視 上一講&#xff0c;我們已經從最根本的邏輯出發&#xff0c;推導出了 AVL 樹失衡時所必需的修復操作——旋轉 (Rotation)。 現在&#xff0c;我們將…

github 上傳代碼步驟

登錄GitHub → 點擊右上角 ?? → New Repository??。填寫倉庫名稱&#xff08;建議與本地項目同名&#xff09;&#xff0c;選擇 ??Public/Private??。??關鍵&#xff1a;不要勾選?? “Initialize with README”&#xff08;避免與本地倉庫沖突&#xff09;。點擊 …

陪診小程序系統開發:開啟智慧就醫新時代

在數字化浪潮的推動下&#xff0c;智慧醫療正逐漸成為現實。陪診小程序系統的開發&#xff0c;作為智慧醫療領域的一次重要創新&#xff0c;正以其獨特的魅力與優勢&#xff0c;引領著就醫新時代的到來。它不僅改變了傳統就醫模式&#xff0c;更以科技的力量&#xff0c;讓醫療…

朝花夕拾(七)--------從混淆矩陣到分類報告全面解析?

目錄 ??機器學習模型評估指南&#xff1a;從混淆矩陣到分類報告全面解析?? ??1. 引言?? ??2. 混淆矩陣&#xff1a;模型評估的基石?? ??2.1 什么是混淆矩陣&#xff1f;?? 2.2二分類問題的混淆矩陣 ??二分類場景下的具體案例? ?分析案例: 1.??案例…

Python讀取和設置PNG圖片的像素值

在Python中&#xff0c;可以使用Pillow庫或OpenCV庫來讀取和寫入PNG圖片的像素值。以下是兩種方法的詳細說明&#xff1a;1. 使用Pillow庫Pillow是Python中常用的圖像處理庫&#xff0c;支持多種圖像格式&#xff0c;包括PNG。讀取像素值from PIL import Imageimg Image.open(…

SkyWalking + Elasticsearch8 容器化部署指南:國內鏡像加速與生產級調優

SkyWalking Elasticsearch8 Docker 部署文檔本文提供在 Ubuntu 服務器上&#xff0c;使用 Docker Compose 部署 SkyWalking&#xff08;OAPUI&#xff09;與 Elasticsearch 8 的完整步驟&#xff0c;數據/日志落地到 /media/disk2 前置條件 Ubuntu&#xff0c;已具備 sudo 權限…

有符號和無符號的區別

有符號&#xff08;Signed&#xff09;和無符號&#xff08;Unsigned&#xff09;是計算機編程中用來描述整數數據類型能否表示負數的兩個概念。它們的主要區別在于能否表示負數以及數值的表示范圍。以下是它們的核心區別&#xff1a;1. 能否表示負數有符號&#xff08;Signed&…

8月21日作業

1、Makefile中頭文件發生過修改的解決&#xff1a; 處插入*.h依賴&#xff0c;對.h文件打的時間戳進行檢查2、頭刪和輸出//五、頭刪 void delete_head(seq_p s) {empty(s);for(int i1;i<s->len;i){s->data[i-1]s->data[i];}s->len--; }//六、輸出 void output(s…

Lucene 8.5.0 的 `.pos` 文件**邏輯結構**

Lucene 8.5.0 的 .pos 文件**邏輯結構**&#xff08;按真實實現重新整理&#xff09; .pos 文件 ├─ Header (CodecHeader) ├─ TermPositions TermCount ← 每個 term 一段&#xff0c;順序由詞典隱式決定 │ ├─ PackedPosDeltaBlock N ← 僅當 **無 payl…

基于Matlab多技術融合的紅外圖像增強方法研究

紅外圖像在低照度、強干擾和復雜環境下具有較強的成像能力&#xff0c;但受傳感器噪聲、成像條件及大氣衰減等因素影響&#xff0c;原始紅外圖像往往存在對比度低、細節模糊及光照不均等問題。本文針對紅外圖像質量退化的特點&#xff0c;提出了一種基于多算法融合的紅外圖像增…

【時時三省】集成測試 簡介

山不在高,有仙則名。水不在深,有龍則靈。 ----CSDN 時時三省 目錄 1,集成測試含義 2,集成測試 驗證方法 3,集成測試 用例設計方法 4,集成測試輸出物 5,集成測試注意點 1,集成測試含義 單元測試在以V模型的流程中,對應的是架構設計階段。在 單元測試 和 架構設計…