力扣例題(用棧實現隊列)

目錄

鏈接. - 力扣(LeetCode)

描述

思路

push

pop

peek

empty

代碼


鏈接
. - 力扣(LeetCode)

描述

思路

push

例如我們將10個元素放入棧中,假設最左邊為棧頂,最右側為棧底

則為10,9,8,7,6,5,4,3,2,1

pop

從隊列的開頭移除并返回元素,隊列的開頭為最右側的1

我們先將前面的元素放入空棧中

空棧中元素順序為2,3,4,5,6,7,8,9,10

我們發現元素順序反了,說明等下要反轉回來

此時原棧中只剩最后一個元素1,我們將1拷貝下來并踢出去即可

此時原棧成為空棧,我們將元素全部放回去即可,原棧順序改為10,9,8,7,6,5,4,3,2

通過反轉我們就順利的將隊列中的第一個元素1給刪除了

peek

返回隊列開頭元素與pop思路基本一致,唯一的不同點為原棧中不需要再將元素1刪去,拷貝后直接將元素全部取回來即可。

empty

兩個棧均不為空指針即可

代碼

typedef int STDataType;
typedef struct Stack
{STDataType* _a;int _top;		// 棧頂int _capacity;  // 容量 
}Stack;
// 初始化棧 
void StackInit(Stack* ps);
// 入棧 
void StackPush(Stack* ps, STDataType data);
// 出棧 
void StackPop(Stack* ps);
// 獲取棧頂元素 
STDataType StackTop(Stack* ps);
// 獲取棧中有效元素個數 
int StackSize(Stack* ps);
// 檢測棧是否為空,如果為空返回非零結果,如果不為空返回0 
int StackEmpty(Stack* ps);
// 銷毀棧 
void StackDestroy(Stack* ps);
void StackInit(Stack* ps) {ps->_a = NULL;ps->_capacity = 0;ps->_top = -1;
}
void StackPush(Stack* ps, STDataType data) {if (ps->_capacity == ps->_top + 1) {int newcapacity = ps->_capacity == 0 ? 4 : 2 * ps->_capacity;STDataType* tmp = (STDataType*)realloc(ps->_a, newcapacity * sizeof(STDataType));if (tmp == NULL) {perror("realloc error");return;}ps->_a = tmp;ps->_capacity = newcapacity;}ps->_top++;ps->_a[ps->_top] = data;
}
void StackPop(Stack* ps) {if (ps->_top == -1) {return;}ps->_top--;
}
STDataType StackTop(Stack* ps) {return ps->_a[ps->_top];
}
int StackSize(Stack* ps) {return ps->_top + 1;
}
int StackEmpty(Stack* ps) {if (ps->_top == -1)return 1;return 0;
}
void StackDestroy(Stack* ps) {ps->_capacity = 0;ps->_top = -1;free(ps->_a);ps->_a = NULL;
}
typedef struct {Stack s1;Stack s2;
} MyQueue;MyQueue* myQueueCreate() {MyQueue* mn = (MyQueue*)malloc(sizeof(MyQueue));StackInit(&(mn->s1));StackInit(&(mn->s2));return mn;
}void myQueuePush(MyQueue* obj, int x) {Stack* nonempty = &(obj->s1), * empty = &(obj->s2);if (StackEmpty(nonempty)) {nonempty = &(obj->s2);empty = &(obj->s1);}StackPush(nonempty, x);
}int myQueuePop(MyQueue* obj) {Stack* nonempty = &(obj->s1), * empty = &(obj->s2);int a;if (StackEmpty(nonempty)) {nonempty = &(obj->s2);empty = &(obj->s1);}while (StackSize(nonempty) != 1) {StackPush(empty, StackTop(nonempty));StackPop(nonempty);}a = StackTop(nonempty);StackPop(nonempty);while (StackSize(empty) != 0) {StackPush(nonempty, StackTop(empty));StackPop(empty);}return a;
}int myQueuePeek(MyQueue* obj) {Stack* nonempty = &(obj->s1), * empty = &(obj->s2);if (StackEmpty(nonempty)) {nonempty = &(obj->s2);empty = &(obj->s1);}while (StackSize(nonempty) != 1) {StackPush(empty, StackTop(nonempty));StackPop(nonempty);}int a = StackTop(nonempty);while (StackSize(empty) != 0) {StackPush(nonempty, StackTop(empty));StackPop(empty);}return a;
}bool myQueueEmpty(MyQueue* obj) {if (StackEmpty(&(obj->s2)) && StackEmpty(&(obj->s1)))return true;return false;
}void myQueueFree(MyQueue* obj) {StackDestroy(&(obj->s1));StackDestroy(&(obj->s2));free(obj);
}

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

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

相關文章

嵌入式 - GPIO編程簡介

An Introduction to GPIO Programming By Jeff Tranter Wednesday, June 12, 2019 編者按:本 2019 年博客系列是 ICS 最受歡迎的系列之一,現已更新(2022 年 12 月),以確保內容仍然準確、相關和有用。 本博客是 Integr…

實體類和Entity Class之間有什么聯系

實體類(Entity Class)和Entity Class在本質上是相同的,它們都是面向對象編程(OOP)中用于表示具有業務邏輯意義的實體的類。 具體來說,實體類通常被設計用于代表真實世界中的對象或概念,這些對象…

PWRWER

編譯燒錄完代碼之后,按下復位鍵屏幕會進行刷新,數據不會丟失 如果按下按鍵,進行頁擦除,之后再按下復位鍵,發現屏幕不會再進行刷新,原因是程序已經被擦除,損毀,無法運行,此…

2024OD機試卷-查找接口成功率最優時間段 (java\python\c++)

題目:查找接口成功率最優時間段 題目描述 服務之間交換的接口成功率作為 服務調用 關鍵質量特性,某個時間段內的接口失敗率使用一個數組表示, 數組中每個元素都是單位時間內失敗率數值,數組中的數值為0~100的整數, 給定一個數值(minAverageLost)表示某個時間段內平均失敗…

圖片轉word如何轉換?

要將圖片轉換為Word文檔,你可以使用以下方法之一: 以上這些方法都可以幫助你將圖片中的文本轉換為可編輯的Word文檔,你可以根據自己的喜好和需求選擇其中一種方法來操作。 使用OCR軟件或在線工具:有許多OCR(Optical Ch…

【數據庫】為何選擇B+樹作為索引?與紅黑樹、B樹的對比

摘要: 數據庫索引是數據庫系統中至關重要的組成部分,影響著數據檢索的效率和性能。本文將探討為何數據庫選擇B樹作為索引的原因,并分別分析紅黑樹和B樹在此場景中的劣勢。 介紹: 數據庫索引是數據庫系統中的重要組成部分&#xf…

實戰LangChain(六):深入LangGraph的高級功能與最佳實踐

實戰LangChain(六):深入LangGraph的高級功能與最佳實踐 實戰LangChain(一):構建您的第一個聊天機器人_langchai 機器人 實戰LangChain(二):探索RAG——為聊天機器人注入知識-CSDN博客 實戰LangChain(三):深化交互——利用Neo4j提升聊天機器人的對話能力 實戰La…

電子資源|基于SSM+vue的電子資源管理系統(源碼+數據庫+文檔)?

電子資源管理系統 目錄 基于SSMvue的電子資源管理系統 一、前言 二、系統設計 三、系統功能設計 1系統功能模塊 2管理員功能模塊 5.2.1管理員功能模塊 5.2.2用戶功能模塊 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算機畢設選題推薦 八、源碼獲取&am…

【Qt 學習筆記】Qt常用控件 | 多元素控件 | Tree Widget的說明及介紹

博客主頁:Duck Bro 博客主頁系列專欄:Qt 專欄關注博主,后期持續更新系列文章如果有錯誤感謝請大家批評指出,及時修改感謝大家點贊👍收藏?評論? Qt常用控件 | 多元素控件 | Tree Widget的說明及介紹 文章編號&#x…

python代碼實現TF-IDF

1、TF-IDF解釋 TF-IDF(Term frequency–inverse document frequency),中文翻譯就是詞頻 - 逆文檔頻率,是一種用來計算關鍵詞的傳統方法。 TF(Term Frequency):TF 的意思就是詞頻,是…

云計算的優勢與未來發展

隨著數字化轉型的蓬勃發展,云計算作為信息技術應用的基礎設施,逐漸成為企業的首選。云計算以其諸多優勢和未來發展趨勢,為企業帶來了更高效、靈活和創新的IT解決方案,助力企業實現數字化轉型和業務發展。 云計算的優勢 首先&…

C#中的隱式類型轉換和顯式類型轉換

在C#中,類型轉換分為隱式類型轉換(Implicit Type Conversion)和顯式類型轉換(Explicit Type Conversion),也稱為隱式轉換和強制轉換。 隱式類型轉換(Implicit Type Conversion) 隱…

SQL Server共享功能目錄顯示灰色無法自行選擇

SQL Server共享功能目錄顯示灰色無法自行調整 一、 將之前安裝SQL Server卸載干凈 二、 清空注冊表 1. 打開注冊表,winR,輸入regedit 2. 注冊表-》編輯-》查找,輸入C:\Program Files\Microsoft SQL Server\ 3. 注冊表-》編輯-》查找&#x…

算法小記(二分)

題目描述: 輸入 𝑛n 個不超過 109109 的單調不減的(就是后面的數字不小于前面的數字)非負整數 𝑎1,𝑎2,…,𝑎𝑛a1?,a2?,…,an?,然后進行 𝑚m 次詢問。對于每次詢問&a…

docker+nginx+Jenkins自動構建

文章目錄 前言一、實操記錄問下AI:jenkins 配置新增一個mobilegit配置Build TriggersBuild EnvironmentBuild StepsPost-build Actions 上面一頓配置下來,構建 -- FAILURE 總結 前言 在已有docker-Jenkins-nginx 部署方案上,在另外一臺測試…

C++實現一個簡單的控制cpu利用率的程序

寫一個程序&#xff0c;讓控制cpu利用率在20%左右 思路很簡單&#xff1a;每個循環控制sleep的時間占比 #include <iostream> #include <chrono> #include <unistd.h>int main() {int ratio 20;int base_time 1000;int sleeptime base_time * (100-ratio…

【計算機網絡篇】數據鏈路層(10)在物理層擴展以太網

文章目錄 &#x1f354;擴展站點與集線器之間的距離&#x1f6f8;擴展共享式以太網的覆蓋范圍和站點數量 &#x1f354;擴展站點與集線器之間的距離 &#x1f6f8;擴展共享式以太網的覆蓋范圍和站點數量 以太網集線器一般具有8~32個接口&#xff0c;如果要連接的站點數量超過了…

10分鐘入門pandas(一)

pandas 是基于python語言的數據分析處理庫,使用廣泛。本文主要參考pandas的官方入門指導,并結合自己入門使用的一些常用操作進行說明。 pandas通常和numpy結合使用,一般通過如下語句導入numpy和pandas庫。 import numpy as np import pandas as pd一. pandas 數據結構 pan…

基于SSM的計算機課程實驗管理系統的設計與實現(源碼)

| 博主介紹&#xff1a;?程序員徐師兄、8年大廠程序員經歷。全網粉絲15w、csdn博客專家、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精彩專欄推薦訂閱&#x1f44…

大屏分辨率適配插件v-scale-screen

前言&#xff1a;大屏分辨率適配繁多&#xff0c;目前我認為最簡單且問題最少的的方案就是使用v-scale-screen插件&#xff0c;無需考慮單位轉換&#xff0c;position定位也正常使用。 1. 效果 填充滿屏幕的效果 保持寬高比的效果 2. 插件原理 原理是通過css transfom 實現…