棧和隊列OJ題

文章目錄

    • 一、雙隊列實現棧
    • 二、雙棧實現隊列

一、雙隊列實現棧

題目鏈接:
https://leetcode.cn/problems/implement-stack-using-queues/description/
在這里插入圖片描述

題目分析: 棧的結構是后進先出,而隊列的結構是先進先出,我們利用這個性質,可以把一個隊列用于存數據,一個隊列用于倒數據

//把之前隊列的實現函數擺出來
void QueueInit(Queue* pq)
{assert(pq);pq->phead = pq->ptail = NULL;pq->size = 0;}
void QueueDestroy(Queue* pq)
{assert(pq);QueueNode* cur = pq->phead;while (cur){cur = pq->phead->next;free(pq->phead);pq->phead = cur;}pq->phead = pq->ptail = NULL;pq->size = 0;
}
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->size == 0;
}void QueuePush(Queue* pq, QDataType x)
{assert(pq);QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));if (newnode == NULL){perror("malloc fail");return;}newnode->val = x;newnode->next = NULL;if (pq->ptail){pq->ptail->next= newnode;pq->ptail = newnode;}else{pq->phead = pq->ptail = newnode;}pq->size++;
}
void QueuePop(Queue* pq)
{assert(pq);assert(pq->phead!=NULL);if (pq->phead->next == NULL){free(pq->phead);pq->phead = pq->ptail = NULL;}else{QueueNode* next = pq->phead->next;free(pq->phead);pq->phead = next;}pq->size--;}
QDataType QueueFront(Queue* pq)
{assert(pq);assert(pq->phead);return pq->phead->val;}
QDataType QueueBack(Queue* pq)
{assert(pq);assert(pq->ptail);return pq->ptail->val;
}int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}

題目要求我們要寫這幾個函數

typedef struct {Queue q1;Queue q2;
} MyStack;MyStack* myStackCreate() {//先造一個棧MyStack* obj = (MyStack*)malloc(sizeof(MyStack));//初始化隊列QueueInit(&obj->q1);QueueInit(&obj->q2);return obj;
}void myStackPush(MyStack* obj, int x) {if(!QueueEmpty(&obj->q1)){QueuePush(&obj->q1,x);}else{QueuePush(&obj->q2,x);}}int myStackPop(MyStack* obj) {
//假設法判斷哪個隊列為空Queue* Empty = &obj->q1;Queue* NonEmpty = &obj->q2;if(!QueueEmpty(&obj->q1)){Empty = &obj->q2;NonEmpty = &obj->q1;}while(QueueSize(NonEmpty)>1){QueuePush(Empty,QueueFront(NonEmpty));QueuePop(NonEmpty);}int end = QueueFront(NonEmpty);QueuePop(NonEmpty);return end;
}int myStackTop(MyStack* obj) {if(!QueueEmpty(&obj->q1)){return QueueBack(&obj->q1);}else{return QueueBack(&obj->q2);}}bool myStackEmpty(MyStack* obj) {return QueueEmpty(&obj->q1)&&QueueEmpty(&obj->q2);
}void myStackFree(MyStack* obj) {QueueDestroy(&obj->q1);QueueDestroy(&obj->q2);free(obj);
}

二、雙棧實現隊列

題目鏈接:
https://leetcode.cn/problems/implement-queue-using-stacks/submissions/506480576/
在這里插入圖片描述

void StackInit(ST* ps)
{assert(ps);ps->a = NULL;ps->capacity = ps->top = 0;}void StackDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = ps->top = 0;
}void StackPush(ST* ps, STDataType x)
{assert(ps);
if (ps->capacity == ps->top)
{int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType)*newcapacity);if (tmp == NULL){perror("realloc fail");return;}ps->a = tmp;ps->capacity = newcapacity;
}ps->a[ps->top] = x;ps->top++;}void StackPop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));ps->top--;
}STDataType StackTop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));return ps->a[ps->top - 1];
}int StackSize(ST* ps)
{assert(ps);return ps->top;
}bool StackEmpty(ST* ps)
{assert(ps);return ps->top==0;
}

題目要求寫的函數:

typedef struct {ST pushst;ST popst;
} MyQueue;MyQueue* myQueueCreate() {MyQueue* obj = (MyQueue*)malloc(sizeof(MyQueue));StackInit(&obj->pushst);StackInit(&obj->popst);return obj;
}void myQueuePush(MyQueue* obj, int x) {assert(obj);assert(&obj->pushst);StackPush(&obj->pushst,x);
}int myQueuePop(MyQueue* obj) {int end = myQueuePeek(obj);StackPop(&obj->popst);return end;
}//棧和隊列的性質不一樣,棧倒過來就是反的,而隊列倒過來還是正的
int myQueuePeek(MyQueue* obj) {assert(obj);assert(&obj->pushst);if(StackEmpty(&obj->popst)){while(!StackEmpty(&obj->pushst)){StackPush(&obj->popst,StackTop(&obj->pushst));StackPop(&obj->pushst);}}return StackTop(&obj->popst);
}bool myQueueEmpty(MyQueue* obj) {return StackEmpty(&obj->popst)&&StackEmpty(&obj->pushst);
}void myQueueFree(MyQueue* obj) {StackDestroy(&obj->popst);StackDestroy(&obj->pushst);free(obj);
}

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

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

相關文章

AI Word Helper (Chorme Extentions) AI單詞助手(谷歌瀏覽器插件)

AI Word Helper (Chorme Extentions) AI單詞助手(谷歌瀏覽器插件) 英文網站,劃詞查單詞,還是看不懂?因為單詞意思那么多,詞性搞不清,上下文搞不清,出來的意思就沒法用,G…

一個基于輪詢的廣告系統

無論PC 客戶端還是手機客戶端,可能會遇到需要發布一些廣告,這些廣告可能是自己開發的,可能是三方的,而且希望是比較通用,能隨時發布,隨時就能看到效果。 本文提供了一種基于輪詢的廣告系統,主要…

【服務器數據恢復】昆騰存儲中raid5磁盤陣列數據恢復案例

服務器數據恢復環境&故障: 10個磁盤柜,每個磁盤柜配24塊硬盤。9個磁盤柜用于存儲數據,1個磁盤柜用于存儲元數據。 元數據存儲中24塊硬盤,組建了9組RAID1陣列1組RAID10陣列,4個全局熱備硬盤。 數據存儲中&#xff0…

Java基于springboot的個人理財系統

基于springboot的個人理財系統 摘要 隨著信息技術在管理上越來越深入而廣泛的應用,管理信息系統的實施在技術上已逐步成熟。本文介紹了個人理財系統的開發全過程。通過分析個人理財系統管理的不足,創建了一個計算機管理個人理財系統的方案。文章介紹了個…

多人音視頻實時通訊架構

直播中的協議與格式 在直播系統中,協議和格式的選擇對于傳輸效率、畫面質量和用戶體驗都至關重要。以下是直播中常見的協議與格式: 協議 RTSP (Real Time Streaming Protocol) RTSP是一個網絡流媒體協議,常用于視頻監控和IPTV等場景。它本身…

考研機試C++題目精選

更多內容會在godownio.github.io更新 算法練習(C代碼) 考研上機或C語言代碼筆試準備,暨大機試原題letcode牛客中南大等高校機試 快速冪算法 題目:輸入一個整數 n ,求 n^n 的個位數是多少。 快速冪算法:…

面經分享|面了好未來NLP算法崗(實習),經歷坎坷但值了!

節前,我們組織了一場算法崗技術&面試討論會,邀請了一些互聯網大廠同學、參加社招和校招面試的同學,針對大模型技術趨勢、大模型落地項目經驗分享、新手如何入門算法崗、該如何備戰、面試常考點分享等熱門話題進行了深入的討論。 今天我分…

【復試2.293.1】c語言——基礎雜項

1.define定義常量類似全局變量,引用是直接拼到代碼中去。 2.關于e 3.參數傳遞 形參直接接收的是數組的起始地址 4.數組越界亂碼問題 5.scanf讀字符串的時候會自動在末尾放0(結束符 6.scanf是讀取輸入緩沖區的數據,是一種拿走操作。讀取若有…

文本多分類

還在用BERT做文本分類?分享一套基于預訓練模型ERNIR3.0的文本多分類全流程實例【文本分類】_ernir 文本分類-CSDN博客 /usr/bin/python3 -m pip install --upgrade pip python3-c"import platform;print(platform.architecture()[0]);print(platform.machine…

C語言實現航班管理

航班管理系統&#xff0c;用C語言實現&#xff0c;可以作為課程設計&#xff0c;代碼如下&#xff1a; #include<iostream> #include<fstream> #include<vector> #include<string> #include<stdlib.h> using namespace std; //信息基類 clas…

Linux第67步_linux字符設備驅動_注冊和注銷

1、字符設備注冊與注銷的函數原型” /*字符設備注冊的函數原型*/ static inline int register_chrdev(unsigned int major,\ const char *name, \ const struct file_operations *fops) /* major:主設備號&#xff0c;Limnux下每個設備都有一個設備號&#xff0c;設備號分…

【六袆 - React】Next.js:React 開發框架;Next.js開發框架的特點

Next.js&#xff1a;React 開發框架 Next.js的特點 1.直觀的、基于頁面的路由系統&#xff08;并支持動態路由&#xff09; Next.js 提供了基于文件系統的路由&#xff0c;意味著你可以通過創建頁面文件來定義路由。 偽代碼示例&#xff1a; // pages/index.js export defa…

【GStreamer】basic-tutorial-2:創建、鏈接GstElement,修改其屬性、狀態

【目錄】郭老二博文之:圖像視頻匯總 1、示例注釋 #include <gst/gst.h>int main (int argc, char *argv[]) {GstElement *pipeline,

MYSQL--JDBC優化

一.JDBC優化: 優化前提: 有時候我們并不清楚某些表當中一共有多少列,以及這些列的數據類型,這個時候我們就需要提前通過一些方法提前了解到這些數據,從而更好的進行輸出 具體語句: package cn.jdbc;import java.sql.*;public class JDBCDEmo1 {public static void main(String…

C語言中的動態內存管理技巧:實現靈活的內存分配和釋放

概念 在C語言中&#xff0c;動態內存管理是實現靈活內存分配和釋放的關鍵。合理地管理動態內存可以提高程序的效率和擴展性。本文將介紹C語言中常用的動態內存管理方法和技巧&#xff0c;幫助讀者優化內存分配和釋放的過程。 常用的動態內存管理方法 內存分配&#xff1a;C語…

【數學建模獲獎經驗】2023第八屆數維杯數學建模:華中科技大學本科組創新獎獲獎分享

2024年第九屆數維杯大學生數學建模挑戰賽將于&#xff1a;2024年5月10日08:00-5月13日09:00舉行&#xff0c;近期同學們都開始陸續進入了備賽階段&#xff0c;今天我們就一起來看看上一屆優秀的創新獎選手都有什么獲獎感言吧~希望能幫到更多熱愛數學建模的同學。據說點贊的大佬…

elment-ui table表格排序后 清除排序箭頭/恢復默認排序 的高亮樣式

問題描述&#xff1a; 1.默認排序是按照名稱升序排列&#xff08;圖一&#xff09; 2.在選擇了篩選項以及其他排序方式之后&#xff0c;箭頭高亮是這樣的&#xff08;圖二&#xff09; 3.當我點擊清空按鈕后&#xff0c;類型清空了&#xff0c;并且傳給后端的排序方式是名稱/升…

探索色彩搭配的奧秘:如何選擇適合產品的理想配色方案

title: 探索色彩搭配的奧秘&#xff1a;如何選擇適合產品的理想配色方案 date: 2024/3/1 20:47:45 updated: 2024/3/1 20:47:45 tags: 色彩搭配品牌形象用戶體驗情感連接信息傳達視覺層次色調選擇 引言 友善的色彩搭配和色調選擇是現代產品設計中不可忽視的關鍵因素。通過正確…

Linux yum安裝pgsql出現Bad GPG signature錯誤

官方文檔&#xff1a;https://www.postgresql.org/download/linux/redhat/ sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql12-server sudo /usr/pgsql-12/bin/…

Rust使用calamine讀取excel文件,Rust使用rust_xlsxwriter寫入excel文件

Rust使用calamine讀取已存在的test.xlsx文件全部數據&#xff0c;還讀取指定單元格數據&#xff1b;Rust使用rust_xlsxwriter創建新的output.xlsx文件&#xff0c;并寫入數據到指定單元格&#xff0c;然后再保存工作簿。 Cargo.toml main.rs /*rust讀取excel文件*/ use cala…